如何匹配整个单词并忽略特殊字符

时间:2016-01-09 02:36:43

标签: regex

对于这个例子,假设我们有以下关键字:

banana
apple.
apple-
apple  party #(double space)    
apple pie
sweet apple pie
apple
apple 34

如何使正则表达式只匹配“苹果”单词而没有特殊字符和多个空格?所以从上面的例子来看,它只会匹配最后4个而忽略第4个。

1 个答案:

答案 0 :(得分:3)

试试这个:

\bapple\b(?!\s{2}|\S)

Demo

这需要在单词之前和之后要求单词边界(\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}}之后。这应该做你想要的。