如果目标词不是另一个词的一部分,则使用正则表达式替换单词

时间:2016-03-03 17:06:49

标签: c# regex

我正在研究要替换的单词的正则表达式,如果它是一个单独的单词而不是另一个单词的一部分。例如,“事物”这个词。如果它是something,那么应该忽略子串“thing”,但是如果单词“thing”前面有一个特殊字符,如点或括号,我希望它被捕获。如果在它之后有括号,点或逗号(或任何其他非字母数字字符),我想要捕获的单词。

在字符串

  

有些东西是thing,还有一件事(thing和更多thing

在上面的句子中,我突出显示要标记为替换的3个单词。我使用了以下正则表达式

\bthing\b

我在regex101.com上尝试了上面的句子并使用这个正则表达式只有第一个单词突出显示。我知道我的正则表达式不会捕获(thing,但我认为它会捕获句子中的最后一个单词,以便至少出现2次。

有人可以帮我修改我的正则表达式来捕捉上面句子中的所有3个出现吗?

3 个答案:

答案 0 :(得分:1)

您可能正在使用javascript regex,它在找到第一个匹配项后返回。如果您在regex101.com的第二个框中添加修饰符g,它将找到所有匹配项。

此网站更适合C#正则表达式测试:http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

答案 1 :(得分:0)

如果您使用C#进行编码并使用“匹配”方法,则应该多次匹配。

Regex regex = new Regex("\\bthing\\b");

foreach (Match match in regex.Matches(
    "Something is a thing, and one more thingy and (thing and more thing"))
{
    Console.WriteLine(match.Value);
}

答案 2 :(得分:0)

alphanum [0-9A-Za-z]的简写为[^\W_]

使用lookbehind和lookahead你会得到

(?<![^\W_])thing(?![^\W_])

扩展

 (?<! [^\W_] )       # Not alphanum behind
 thing               # 'thing'
 (?! [^\W_] )        # Not alphanum ahedad

匹配突出显示的文字

有些东西是thing,还有一件事(thing和更多thing