如何在正则表达式中替换部分匹配

时间:2013-08-16 11:04:10

标签: c# regex full-text-search

我有一个看起来像这样的字符串

<span class=SpellE>Content</span>

我还有一个正则表达式,可以在我的文本中搜索那种短语,并在短语中搜索一个短语:

"\w</span>"

换句话说:a除了空格之外,在它前面有一个符号。

所以,我有这个:

const string pattern = "\\w</span>";
const string replace = "&nbsp;</span>";
var rgx = new Regex(pattern);
var resultAfterRegex = rgx.Replace(result, replace);
return resultAfterRegex;

但是在结果中它也取代了之前的那封信,我正在失去它。 它是这样的:

Conten _ ,最后缺少 t

你知道如何在没有前面的字母的情况下只更换 吗?

1 个答案:

答案 0 :(得分:3)

问题在于正则表达式正在消耗匹配的所有内容,包括单个字母。

这样做的方法如下:

const string pattern = "(\\w)</span>";
const string replace = "$1&nbsp;</span>";

这样做是使用()捕获单个字母匹配,然后使用$1将其放入替换后的字符串中。

正如@dasblinkenlight指出的那样,你也可以使用非捕获的lookbehind如下:

const string pattern = "(?<=\\w)</span>";
const string replace = "&nbsp;</span>";

此处的模式使用特殊语法非常粗略地说\w必须存在,但不是实际匹配的一部分。所以这个方法可能更接近你想要的,因为它只匹配你想要替换的东西。

有关正则表达式语法的详细信息以及指向更详细说明的链接,请参阅http://msdn.microsoft.com/en-us/library/az24scfc.aspx