给定$displayHeight = "800";
,将800
处的任何数字替换为int值y_res
。
resultString = Regex.Replace(
im_cfg_contents,
@"\$displayHeight[\s]*=[\s]*""(.*)"";",
Convert.ToString(y_res));
在Python中我会使用re.sub,它会起作用。在.NET中,它取代了整行,而不是匹配的组。
什么是快速解决方法?
答案 0 :(得分:2)
基于已发布的几个答案。零宽度断言允许您进行正则表达式匹配,而无需将这些字符放在匹配中。通过将字符串的第一部分放在一个组中,我们将它与您要替换的数字分开。然后通过在该组中使用零宽度lookbehind断言,我们允许正则表达式正常进行但省略匹配中该组中的字符。类似地,我们将字符串的最后一部分放在一个组中,并使用零宽度前瞻断言。 Grouping Constructs on MSDN显示组和断言。
resultString = Regex.Replace(
im_cfg_contents,
@"(?<=\$displayHeight[\s]*=[\s]*"")(.*)(?="";)",
Convert.ToString(y_res));
另一种方法是使用以下代码。对正则表达式的修改只是将第一部分放在一个组中,将最后一部分放在一个组中。然后在替换字符串中,我们在第一组和第三组中添加。不如第一种方法好,但不如写出$ displayHeight部分那么糟糕。 Substitutions on MSDN显示$字符的工作方式。
resultString = Regex.Replace(
im_cfg_contents,
@"(\$displayHeight[\s]*=[\s]*"")(.*)("";)",
"${1}" + Convert.ToString(y_res) + "${3}");
答案 1 :(得分:0)
试试这个:
resultString = Regex.Replace(
im_cfg_contents,
@"\$displayHeight[\s]*=[\s]*""(.*)"";",
@"\$displayHeight = """ + Convert.ToString(y_res) + @""";");
答案 2 :(得分:0)
你也可以试试这个,虽然我认为它比我的其他方法慢一点:
resultString = Regex.Replace(
im_cfg_contents,
"(?<=\\$displayHeight[\\s]*=[\\s]*\").*(?=\";)",
Convert.ToString(y_res));
答案 3 :(得分:0)
它替换了整个字符串,因为你已匹配整个字符串 - 这个语句没有告诉C#只替换匹配的组,它会找到并存储匹配的组,但它仍然匹配整个字符串。< / p>
您可以将替换者更改为:
@"\$displayHeight = """ + Convert.ToString(y_res) + @""";"
..或者你可以改变你的模式以匹配数字,即:
@"[0-9]+"
..或者您可以看到C#正则表达式是否支持外观(我不确定它是否随意)并相应地更改您的匹配。
答案 4 :(得分:0)