正则表达式匹配连续单词序列与空格(最后一个空格除外)

时间:2013-02-18 05:57:20

标签: regex

我有一个单词列表,我想匹配这些单词的任何组合。假设我有单词appleorangemango,我正在使用以下字符串:

This place has the best apple pie. They also have orange, apple and mango-apple smoothie ... 

我到目前为止的正则表达式是\b((apple|orange|mango)[\s-(,\s)]*)+

它匹配正确的单词组合,但另外它匹配序列末尾的额外空格。我得到的比赛:

"apple "
"orange, apple "
"mango-apple "

我知道为什么会那样做。如何更改正则表达式以消除末尾的最后一个空格?

1 个答案:

答案 0 :(得分:3)

最后添加\b似乎对我有用。此外,-放在方括号中时应放在最后。因此,您需要做的就是将正则表达式更改为:\b((apple|orange|mango)[\s(,\s)-]*)+\b

编辑:

根据您的评论,我尝试了这个:\b((apple|orange|mango)([\s,-]+(apple|orange|mango))*)+\b。当前正则表达式的问题在于你也在最后抛出空格,以便你可以匹配apple mango

我建议的正则表达式应该匹配空格,短划线或逗号,当且仅当它们后跟单词appleorangemango时才会匹配。