簡體   English   中英

Regex.Replace:基於可選組的條件替換

[英]Regex.Replace: Conditional replacement based on optional group

我在C#中使用Regex.Replace。 在替換的字符串中,我想提出一個條件,即只有捕獲了可選組之一時,字符串的一部分才會出現。 例如,我有這個正則表達式:

(?<Expiry>\d+[my])\s+(?<Flag>[a-z][A-Z])?\s*$)

請注意,“ Flag捕獲”組是可選的

替換字符串是

"Expiry is ${Expiry}. Flag is : ${Flag}"

現在,我希望僅在捕獲到Flag組的情況下,字符串"Flag is : ${Flag}"才會出現在結果中。

我正在使用以下代碼:

var regex = new
Regex("(?<Expiry>\d+[my])\s+(?<Flag>[a-z][A-Z])?\s*$)",
RegexOptions.IgnoreCase | RegexOptions.Compiled);
string result = regex.Replace("10y", "Expiry is ${Expiry}. Flag is : ${Flag}";

結果Expiry is 10yExpiry is 10y

string result = regex.Replace("10y abc", "Expiry is ${Expiry}. Flag is ${Flag}");

結果應為“到期時間為10y。標志為:abc”。

任何幫助深表感謝。

您可以根據指定的組是否參與匹配(= matched)來使用不同的替換值。

請參閱以下示例:

var s = "1m aZ";
var pat = @"(?<Expiry>\d+[my])\s+(?<Flag>[a-z][A-Z])?\s*$";
var res = Regex.Replace(s, pat, m => m.Groups["Flag"].Success ? 
    string.Format("Flag is : {0}.", m.Groups["Flag"].Value) : 
    string.Format("Expiry is {0}.", m.Groups["Expiry"].Value));
Console.WriteLine(res);

觀看在線演示

如果Flag組匹配,則替換將為string.Format("Flag is : {0}.", m.Groups["Flag"].Value) ,否則,替換將僅包含到期消息。

暫無
暫無

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

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