用于连字符单词的Python正则表达式

16 投票
1 回答
32250 浏览
提问于 2025-04-17 07:43

我在找一个正则表达式,用来匹配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)

在这里,我们把带连字符的词定义为:

  • 一串字母或数字
  • 后面可以跟任意数量的:
    • 一个连字符
    • 再后面跟着字母或数字

撰写回答