我有一个匹配的词下面的正则表达式:用连字符匹配的单词和撇号
\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
因为一个字可以启动或撇号结束,但不能用连字符。请注意,'自己不应该匹配。
我有一个匹配的词下面的正则表达式:用连字符匹配的单词和撇号
\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
因为一个字可以启动或撇号结束,但不能用连字符。请注意,'自己不应该匹配。
您的\w+(?:'|\-\w+)?
开始与单词字符\w
匹配,因此所有以'
开头的“单词”都不符合要求。
您可以包括\w
和'
为角色类,并使用
'?\w[\w']*(?:-\w+)*'?
如果一个“字”只能有1个连字符,在与?
末取代*
量词。
击穿:
'?
- 可选撇号\w
- 单词字符[\w']*
- 0+字字符或撇号(?:-\w+)*
- 0+的序列:
-
- 连字号\w+
- 1+字字符'?
- 可选的撇号这将匹配一个'自己。我不希望与此相匹配。 – Baz
我更新了另一个模式,但也许你也可以尝试['(?:\ B'\ b)?\ w +(?:[ - '] \ w +)*(?:\ b'\ B)?' ](https://regex101.com/r/rN7hV8/3) –
_Since一个字可以启动或使用连字符,但不与apostrophe._违背你的比赛结束。 's'和'yea''开头和结尾都是撇号。 –
@noob正确,我已经解决了这个问题! – Baz