2

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

<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;

但结果它也替换了前面的字母,而我正在失去它。它是这样的:

与最后缺少的t相匹配

你知道我怎么能只替换 没有前面的字母吗?

4

1 回答 1

3

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

方法如下:

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

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

正如@dasblinkenlight 所指出的,您还可以使用非捕获后视,如下所示:

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

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

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

于 2013-08-16T11:10:39.760 回答