正则表达式.替换:根据可选组进行条件替换
本文关键字:替换 条件 正则表达式 | 更新日期: 2023-09-27 18:15:02
我使用正则表达式。在c#中替换。在替换的字符串中,我想设置一个条件,即只有在捕获可选组中的一个时,才会显示字符串的一部分。例如,我有这个regex:-
(?<Expiry>'d+[my])'s+(?<Flag>[a-z][A-Z])?'s*$)
注意Flag
捕获组为可选。
替换字符串为
"Expiry is ${Expiry}. Flag is : ${Flag}"
现在我想要"Flag is : ${Flag}"
字符串只出现在结果中,如果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
。
string result = regex.Replace("10y abc", "Expiry is ${Expiry}. Flag is ${Flag}");
结果应该是"Expiry is 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)
,否则,替换将只包含过期消息