[英]Regex match whole word and punctuation
我有以下字符串: "WordContainingYes. no yes,- no! yes. no"
我需要替换所有“ yes。”实例,但保留“ WordContainingYes”。 完整。 我正在使用"\\b(yes.)\\b"
但是当模式中有标点符号时,它将不起作用。 因此,谁知道我该如何匹配整个单词和标点符号?
UPDATE
这个词后我需要匹配任何标点符号。 不只是点。
谢谢
您可以使用此:
(?<=\s)(yes.)
工作正则表达式示例:
这对空间使用了“向后看”,因此当使用replace时,空间将不会被替换。
按照OP上面的评论:“ 它可以工作,但是它也可以删除单词之前的空格(当执行替换时)。您知道如何解决该问题吗? ”
我认为@Jones明白了这一点。 (点)是特殊符号,需要转义。 请尝试以下操作:
\byes\.\b
如果要标记任何标点符号,则应使用类似以下内容的方法:
\byes[^\w]\b
女巫将匹配是,后跟任何非白人字符。 您可能需要更加精确,并实际写出所有标点符号(我假设您没有使用,因为之前使用过。)
这个正则表达式应该为您工作(假设输入字符串上没有unicode
):
(?<=\b)yes[^a-zA-Z0-9]
您可能会使用标点符号或单词边界。
注意 -指定类似\\byes\\.\\b
时必须小心
左侧是\\.
非单词,因此要在右侧匹配\\b
必须有一个单词\\w
,否则将不匹配。
所以,不要那样做。
这可能有效。
\\b(yes(?:\\p{Punct}|\\b))
稍作修改,您就可以排除某些标点符号。
这将捕获所有非引号标点符号,这些标点符号将作为替换的一部分删除,或者仅与单词边界匹配。
\\b(yes(?:[^\\P{Punct}'"]|\\b))
另一种选择是仅包含所需的标点。
\\b(yes(?:[.,+*?-]|\\b))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.