我正在寻找一个正则表达式,该正则表达式查找任何$$some_val$$并将some_val替换为大写字母。

例如,输入为:

<p><a href='accept/272/$$id$$'>YES</a></p>
<p>Hi $$FirstName$$ some more text $$date$$ lorem ipsum</p>
<h1>$$club$$</h1>
$$content$$


将输出:-

<p><a href='accept/272/$$ID$$'>YES</a></p>
<p>Hi $$FIRSTNAME$$ some more text $$DATE$$ lorem ipsum</p>
<h1>$$CLUB$$</h1>
$$CONTENT$$


目前,我有以下正则表达式:

var html = Regex.Replace(html, @"\$\$(.*)\$\$", m=> m.Value.ToUpper());


但是会产生错误的结果。

<p><a href='accept/272/$$ID$$'>YES</a></p>
<p>Hi $$FIRSTNAME$$ SOME MORE TEXT $$DATE$$ lorem ipsum</p>
<h1>$$CLUB$$</h1>
$$CONTENT$$


因为SOME MORE TEXT也在开始和结束$$分隔符之间大写。

请注意,$$可能会在一行中重新出现,或者在一行中开始/结束。

最佳答案

您只需要使用非贪婪/惰性匹配量词(*?):

var regex = new Regex(@"\$\$.*?\$\$");
var input = "this $$is a$$ test of the $$procedure$$";
var output =
     r.Replace(input, m=>m.Value.ToUpper());

09-25 17:09
查看更多