用于连字符单词的Python正则表达式
我在找一个正则表达式,用来匹配Python中的带连字符的单词。
我目前找到的最接近的是:'\w+-\w+[-w+]*'
text = "one-hundered-and-three- some text foo-bar some--text"
hyphenated = re.findall(r'\w+-\w+[-\w+]*',text)
这个表达式返回的结果是 ['one-hundered-and-three-', 'foo-bar']
。
这个结果几乎完美,除了在 'three'
后面多了一个连字符。我只想要在后面跟着一个 '单词'
时才有这个额外的连字符。也就是说,我需要的不是 '[-\w+]\*'
,而是像 '(-\w+)*'
这样的东西,我以为这样可以,但结果并不对(它返回 ['-three, '']
)。也就是说,我需要一个可以匹配 |单词
后面跟着连字符,再跟着单词,最后再跟着零个或多个连字符和单词的模式|。
1 个回答
31
试试这个:
re.findall(r'\w+(?:-\w+)+',text)
在这里,我们把带连字符的词定义为:
- 一串字母或数字
- 后面可以跟任意数量的:
- 一个连字符
- 再后面跟着字母或数字