【问题标题】:Python Regex for hyphenated words用于连字符的 Python 正则表达式
【发布时间】:2012-01-13 01:39:54
【问题描述】:

我正在寻找一个正则表达式来匹配 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 后跟 hyphen 后跟 word 后跟 hyphen_word 零次或多次 |。

【问题讨论】:

  • 我不知道您打算将其用于什么,但您是否考虑过尾随或前缀连字符为valid 的情况,例如“十九世纪和二十世纪”或“投资者-拥有和经营”?
  • 您自己的表达式中的主要问题是方括号。他们不会将内容组合在一起,而是创建一个角色类,这是完全不同的东西。
  • 感谢您的输入,懒惰者。你指出的情况我已经考虑过了,它们不会造成问题。谢谢你的澄清,stema。我意识到方括号没有对内容进行分组,但它们与我试图做的事情最接近。

标签: python regex hyphen


【解决方案1】:

试试这个:

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

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

  • 多个单词字符
  • 后跟任意数量的:
    • 一个连字符
    • 后跟单词字符

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-28
    • 2022-01-25
    • 2020-03-11
    • 2011-06-06
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多