我有一个看起来像这样的字符串
<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 。
你知道如何在没有前面的字母的情况下只更换 吗?
答案 0 :(得分:3)
问题在于正则表达式正在消耗匹配的所有内容,包括单个字母。
这样做的方法如下:
const string pattern = "(\\w)</span>";
const string replace = "$1 </span>";
这样做是使用()
捕获单个字母匹配,然后使用$1
将其放入替换后的字符串中。
正如@dasblinkenlight指出的那样,你也可以使用非捕获的lookbehind如下:
const string pattern = "(?<=\\w)</span>";
const string replace = " </span>";
此处的模式使用特殊语法非常粗略地说\w
必须存在,但不是实际匹配的一部分。所以这个方法可能更接近你想要的,因为它只匹配你想要替换的东西。
有关正则表达式语法的详细信息以及指向更详细说明的链接,请参阅http://msdn.microsoft.com/en-us/library/az24scfc.aspx。