正则表达式匹配整个单词和标点符号

时间:2014-02-22 17:34:58

标签: c# .net regex

我有以下字符串:"WordContainingYes. no yes,- no! yes. no" 我需要替换所有“是”的实例,但保留“WordContainingYes”。完整。 我正在使用"\b(yes.)\b"但是当模式中有标点符号时它不起作用。所以任何人都知道如何在它之后匹配整个单词+标点符号?

更新

我需要匹配单词后面的任何标点符号。不仅是点。

由于

5 个答案:

答案 0 :(得分:1)

你可以用这个:

(?<=\s)(yes.)

工作正则表达式示例:

http://regex101.com/r/dO3rD9

这对空间使用“lookbehind”,因此在使用replace时,空间不会被替换。

根据OP上面的评论:“它有效,但它也删除了单词之前的空格(在进行替换时)。任何想法如何解决?

答案 1 :(得分:0)

试试这个:

\byes\.\b

更新:

\s(yes.?)\s

DEMO: http://regexr.com?38bnn


P.S。 .是正则表达式的特殊字符,意思是“匹配任何内容”。所以必须转义(\.

答案 2 :(得分:0)

我认为@Jones明白了这一点:。 (点)是一个特殊符号,需要转义。请尝试以下方法:

\byes\.\b

如果你想要任何标点符号,你应该使用类似的东西:

\byes[^\w]\b

女巫将匹配是,然后是任何非白色角色。您可能希望更精确并实际写出所有标点符号(我假设您没有,因为您之前使用过。)

答案 3 :(得分:0)

这个正则表达式适合你(假设输入字符串没有unicode):

(?<=\b)yes[^a-zA-Z0-9]

答案 4 :(得分:0)

你可以使用标点符号或单词边界。

注意 - 在指定类似\byes\.\b之类的内容时必须小心 在左侧是\.非单词,因此要在右侧匹配\b
需要有一个单词\w或者它不会匹配。

所以,不要这样做。

这可能有用。

\b(yes(?:\p{Punct}|\b))

稍作修改,你可以排除这样的标点符号。
这会捕获所有非引号标点符号,这些标点符号将作为替换符号的一部分被删除,或者仅匹配单词边界。

\b(yes(?:[^\P{Punct}'"]|\b))

另一种选择是仅包含您想要的标点符号。

\b(yes(?:[.,+*?-]|\b))