我有一个看起来像这样的字符串
<span class=SpellE>Content</span>
我还有一个正则表达式,可以在我的文本中搜索此类短语,尤其是短语:
"\w</span>"
换句话说:a 前面有一个符号(空格除外)。
所以,我有这个:
const string pattern = "\\w</span>";
const string replace = " </span>";
var rgx = new Regex(pattern);
var resultAfterRegex = rgx.Replace(result, replace);
return resultAfterRegex;
但在结果中它也替换了 之前的字母,但我丢失了它。 它是这样的:
Conten_,最后缺少 t。
您知道如何仅替换 而没有前面的字母吗?
最佳答案
问题在于正则表达式正在消耗所有匹配的内容,包括单个字母。
实现方法如下:
const string pattern = "(\\w)</span>";
const string replace = "$1 </span>";
它的作用是使用 ()
捕获单个字母匹配,然后使用 $1
将其放入替换的字符串中。
正如 @dasblinkenlight 所指出的,您还可以使用非捕获后向查找,如下所示:
const string pattern = "(?<=\\w)</span>";
const string replace = " </span>";
这里的模式使用特殊的语法来非常粗略地表示 \w
必须存在,但不是实际匹配的一部分。所以这个方法可能更接近你想要的,因为它只匹配你想要替换的东西。
参见http://msdn.microsoft.com/en-us/library/az24scfc.aspx有关正则表达式语法的详细信息以及更详细说明的链接。
关于c# - 如何替换正则表达式中匹配的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18271844/