2016-03-03 14 views
0

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

在串

东西是一个thing,并且被标记为替代一个更啄和(thingthing

在上述我强调了3个字的判决。我使用以下正则表达式

\bthing\b 

我试了上面的语句在正则表达式101.com和使用这个正则表达式只有第一个字被突出显示。我明白我的正则表达式不会捕获(thing,但我认为它会捕获句子中的最后一个单词,以便至少有两次出现。

有人可以帮助我修改我的正则表达式来捕获上述语句中的所有3次出现吗?

+0

向我们展示你到目前为止已经尝试过的东西,这样我们就可以看到你在做什么或没有在使用正则表达式。 – MethodMan

+1

@MethodMan'string.Replace'也会替换“Something”和“thingy”中的“thing”。 – juharr

+0

OP不想替换'thingy',只是确切的词'thing'。正则表达式在这里似乎不是一个糟糕的选择。 – ps2goat

回答

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); 
} 
1

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

这个站点是C#正则表达式测试更好:http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

+0

我在哪里添加'g'?在我的正则表达式? – ElenaDBA

+0

在regex101.com上,它是第二个框。在JavaScript正则表达式中,您可以使用'/ \ bthing \ b/g' – ps2goat

+0

C#将默认匹配全部。 – ps2goat

0

速记alphanum [0-9A-Za-z][^\W_]

使用回顾后和预读,你会得到

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

扩展

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

匹配高亮文本

东西是一个thing,还有一啄和(thing多,为什么你就不能使用这种具有。载沿`string.Replace`功能,的IndexOf方法.. ALS ocan你thing

相关问题