簡體   English   中英

C#中具有組和值的正則表達式

[英]Regular Expression with Groups and Values in C#

我正在嘗試編寫一個簡單的正則表達式,以在管道分隔的文件中將大約兩位數的年份轉換為兩位數的年份。 我在用:

Regex dateFormat = new Regex(@"\|(\d\d)/(\d\d)/([\d\d)\|");
string convertedString = dateFormat.Replace(contents, @"|$1$220$3|'");

我想要的是| 10/31/09 | 被| 10312009 |代替。

我得到的是| 10 $ 22009 |

我認為問題是.NET正在評估$ 1和$ 3,但正在考慮中間有一個沒有價值的組(也許$ 220?)。 如何讓.NET知道20是一個常量值而不是組值的一部分?

提前致謝

您對這個問題的直覺是正確的:第二個反向引用被解釋為$220 ,而不是$2 要解決此問題,請使用花括號:

dateFormat.Replace(contents,@"|$1${2}20$3|'");

有關.NET正則表達式的更多信息,請參見此處

您的正則表達式文本無法解析。 “ [”應該在那里嗎? 將數字包裝在{}中以解決替換問題:

Regex dateFormat = new Regex(@"\|(\d\d)/(\d\d)/(\d\d)\|");
string convertedString = dateFormat.Replace(contents, @"|${1}${2}20${3}|'");

您可以修改正則表達式以使用命名組。 命名組的語法為(?)。 然后,在“替換”功能中,您可以使用組名而不是組號。

Regex dateFormat = new Regex(@"\|(?<month>\d\d)/(?<day>\d\d)/(?<year>[\d\d)\|");
string convertedString = dateFormat.Replace(contents, @"|${month}${day}20${year}|'");

我不知道該怎么做,但這是我的解決方法。 使用命名組。

Regex dateFormat = new Regex(@"\|(?<month>\d\d)/(?<date>\d\d)/(?<year>\d\d)\|");
string convertedString = dateFormat.Replace(contents, @"|${month}${date}20${year}|'");

請參閱本頁底部的更多信息。

希望能有所幫助。

嘗試這個:

string contents = "|10/31/09|";
Regex dateFormat = new Regex(@"\|(?<mm>\d\d)/(?<dd>\d\d)/(?<yy>\d\d)\|");
Console.WriteLine(dateFormat.Replace(contents, "|${mm}${dd}20${yy}|"));

更多信息:

調用RegexObj.Replace(“ subject”,“ replacement”)以在主題字符串上使用正則表達式執行搜索和替換,並用替換字符串替換所有匹配項。 在替換字符串中,可以使用$&將整個正則表達式匹配項插入替換文本中。 您可以使用$ 1,$ 2,$ 3等...將捕獲括號之間匹配的文本插入替換文本。 使用$$將單個美元符號插入替換文本中。 要用第一個后​​向引用立即替換,后跟數字9,請使用$ {1} 9。 如果鍵入$ 19,並且反向引用少於19個,則$ 19將被解釋為原義文本,並按原樣顯示在結果字符串中。 要從命名捕獲組插入文本,請使用$ {name}。 不正確地使用$符號可能會產生不希望的結果字符串,但絕不會引發異常。

來自http://www.regular-expressions.info/dotnet.html

我發現您的正則表達式存在問題,即不匹配的[字符。 以下工作正常:

\|(?<month>\d{2})/(?<day>\d{2})/(?<year>\d{2})\|

這將對月,日和年結果進行分組。 然后,您可以用以下字符串替換:

|$1/$2/20$3|

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM