对于这个例子,假设我们有以下关键字:
banana
apple.
apple-
apple party #(double space)
apple pie
sweet apple pie
apple
apple 34
如何使正则表达式只匹配“苹果”单词而没有特殊字符和多个空格?所以从上面的例子来看,它只会匹配最后4个而忽略第4个。
答案 0 :(得分:3)
试试这个:
\bapple\b(?!\s{2}|\S)
这需要在单词之前和之后要求单词边界(\b
)并排除匹配后跟两个空格或非空白字符。
修改:您在评论中指出要匹配整行。这很简单;只需在上面的正则表达式之前和之后添加.*
,如下所示:
.*?\bapple\b(?!\s{2}|\S).*
Demo(我在第一个?
添加了.*
,以避免由于回溯导致的性能问题。)
修改2 :根据其他评论:您还希望排除apple . com
等匹配项。这有点棘手,但这个正则表达式会做到这一点:
(?!.*?\bapple\b(?:\s{2}|\s*[.\/,<>-])).*?\bapple\b.*
Demo。这个使用负向前瞻工作。组(?!.*?\bapple\b(?:\s{2}|\s*[.\/,<>-]))
表示该行必须不包含apple
,其中包含(a)2+个空格或(b)任意数量的空格和集合中的字符{{ 1}}之后。这应该做你想要的。