我有一个单词列表,我想匹配这些单词的任何组合。假设我有单词apple
,orange
和mango
,我正在使用以下字符串:
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 "
我知道为什么会那样做。如何更改正则表达式以消除末尾的最后一个空格?
答案 0 :(得分:3)
最后添加\b
似乎对我有用。此外,-
放在方括号中时应放在最后。因此,您需要做的就是将正则表达式更改为:\b((apple|orange|mango)[\s(,\s)-]*)+\b
编辑:
根据您的评论,我尝试了这个:\b((apple|orange|mango)([\s,-]+(apple|orange|mango))*)+\b
。当前正则表达式的问题在于你也在最后抛出空格,以便你可以匹配apple mango
。
我建议的正则表达式应该匹配空格,短划线或逗号,当且仅当它们后跟单词apple
,orange
或mango
时才会匹配。