我有以下正则表达式匹配单词:
\w+(?:'|\-\w+)?
对于以下字符串:
' 's yea' don't -yeah no- ice-cream '
它给出了以下匹配:
s
yea'
don't
yeah
no
ice-cream
但是,我想要以下匹配:
's
yea'
don't
yeah
no
ice-cream
因为一个单词可以以撇号开头或结尾但不能用连字符开头或结尾。注意a'本身不应该匹配。
答案 0 :(得分:5)
您的\w+(?:'|\-\w+)?
开始与字词\w
匹配,因此根据要求,所有以'
开头的“字词”都不匹配。
您可以将\w
和'
添加到字符类中并使用
'?\w[\w']*(?:-\w+)*'?
请参阅regex demo
如果“单词”只能包含1个连字符,请使用*
量词替换最后的?
。
故障:
'?
- 可选撇号\w
- 一个单词字符[\w']*
- 0+字符或撇号(?:-\w+)*
- 0+序列:
-
- 连字符\w+
- 1+字符'?
- 可选撇号