我有以下字符串:"WordContainingYes. no yes,- no! yes. no"
我需要替换所有“是”的实例,但保留“WordContainingYes”。完整。
我正在使用"\b(yes.)\b"
但是当模式中有标点符号时它不起作用。所以任何人都知道如何在它之后匹配整个单词+标点符号?
更新
我需要匹配单词后面的任何标点符号。不仅是点。
由于
答案 0 :(得分:1)
你可以用这个:
(?<=\s)(yes.)
工作正则表达式示例:
这对空间使用“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))