繁体   English   中英

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

[英]Regex match whole word and punctuation

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

UPDATE

这个词后我需要匹配任何标点符号。 不只是点。

谢谢

您可以使用此:

(?<=\s)(yes.)

工作正则表达式示例:

http://regex101.com/r/dO3rD9

这对空间使用了“向后看”,因此当使用replace时,空间将不会被替换。

按照OP上面的评论:“ 它可以工作,但是它也可以删除单词之前的空格(当执行替换时)。您知道如何解决该问题吗?

尝试这个 :

\byes\.\b

更新:

\s(yes.?)\s

演示: http: //regexr.com? 38bnn


PS . 是regex的特殊字符,意思是“匹配任何东西”。 因此必须将其转义( \\.

我认为@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM