Regex 如何只匹配整个单词而忽略特殊字符
对于本例,假设我们有以下关键字:Regex 如何只匹配整个单词而忽略特殊字符,regex,Regex,对于本例,假设我们有以下关键字: banana apple. apple- apple party #(double space) apple pie sweet apple pie apple apple 34 如何使正则表达式只匹配没有特殊字符和多个空格的“apple”单词?所以从上面的例子来看,它只匹配最后4个,而忽略前4个 试试这个: \bapple\b(?!\s{2}|\S) 这需要在单词前后设置单词边界(\b),并排除后跟两个空格或非空白字符的匹配项 编辑:您在评论
banana
apple.
apple-
apple party #(double space)
apple pie
sweet apple pie
apple
apple 34
如何使正则表达式只匹配没有特殊字符和多个空格的“apple”单词?所以从上面的例子来看,它只匹配最后4个,而忽略前4个 试试这个:
\bapple\b(?!\s{2}|\S)
这需要在单词前后设置单词边界(\b
),并排除后跟两个空格或非空白字符的匹配项
编辑:您在评论中指出要匹配整行。这很容易;只需在上面的正则表达式之前和之后添加
*
,如下所示:
.*?\bapple\b(?!\s{2}|\S).*
(我在第一个*
中添加了一个?
,以避免回溯导致的性能问题。)
编辑2:基于其他注释:您还希望排除匹配项,如
apple。com
。这有点棘手,但这个正则表达式可以做到:
(?!.*?\bapple\b(?:\s{2}|\s*[.\/,<>-])).*?\bapple\b.*
(?!*?\bapple\b(?:\s{2}\s*[.\/,-])。?\bapple\b*
。这一个通过使用负前瞻来工作。组
(?!.\bapple\b(?:\s{2}\s*[.\/,-])
意味着该行不能包含apple
,且该行后面不能有(a)2+空格或(b)任意数量的空格和集,-
中的字符。这应该可以满足您的需要。谢谢!这看起来是正确的,只有一个问题:它有可能是包含单词的整个句子或行吗?在“甜苹果派”示例中,只有苹果匹配。@NemaGa Sure;请参阅我的编辑。在正则表达式前后添加*
将使其与整行匹配。实际上,出于性能原因,最好在之前和之后执行*?
。*
。不过有一个小问题(抱歉解释得不好),代码仍然匹配,例如“apple.com”,是否可以让它完全忽略这些特殊字符(.-/,)@NemaGa你能澄清一下吗?它是否应该排除任何在下一个单词前有特殊字符的apple
。应该这样做。如果你需要额外的调整,你可能想问一个新问题,并参考这一个上下文。