16

我正在寻找一个正则表达式来匹配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']。

除了“三”之后的尾随连字符外,这几乎是完美的。如果后面跟着一个“单词”,我只想要额外的连字符。即,而不是'[-\w+]*',我需要类似'(-\w+)*'的东西,我认为它可以工作,但没有(它返回['-three,''])。即匹配|word 后跟连字符后跟word 后跟hyphen_word 零次或多次|。

4

1 回答 1

29

尝试这个:

re.findall(r'\w+(?:-\w+)+',text)

在这里,我们认为一个连字符的词是:

  • 多个单词字符
  • 后跟任意数量的:
    • 一个连字符
    • 后跟单词字符
于 2011-12-05T09:39:09.973 回答