[英]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 10y
應Expiry 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.