c# - 如何替换正则表达式中匹配的一部分

标签 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

您知道如何仅替换 而没有前面的字母吗?

最佳答案

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

实现方法如下:

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有关正则表达式语法的详细信息以及更详细说明的链接。

关于c# - 如何替换正则表达式中匹配的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18271844/

相关文章:

c# - 在启用滚动的文本框中禁用版本

c# - 使用 Microsoft LifeCam 和 C# 捕获图像

php - 使链接在文本 block 中可点击的最佳方法

sql - 全文搜索与 LIKE

c# - 如何在Windows桌面上直接画图,C#?

c# - 在 html 文本框 mvc 中使用短日期字符串

java - 解释句子并转换成相应的格式

javascript - 匹配所有以四个空格为前缀的行

ruby-on-rails-3 - 如何防止Heroku清除acts_as_indexed建立的索引

amazon-web-services - 具有共享内容库的大型用户群的云搜索解决方案