【问题标题】:List of all words matching regular expression匹配正则表达式的所有单词列表
【发布时间】:2011-06-03 09:50:29
【问题描述】:

假设我有一些字符串:“Lorem ipsum dolor sit amet” 我需要一个长度超过 3 的所有单词的列表。我可以使用正则表达式吗?

例如

pattern = re.compile(r'some pattern')
result = pattern.search('Lorem ipsum dolor sit amet').groups()

结果包含“Lorem”、“ipsum”、“dolor”和“amet”。

已编辑:

我的意思是只能包含字母和数字。

【问题讨论】:

  • 您的意思是 ASCII 字母,还是像重音字符等国际字母也相关?

标签: python regex


【解决方案1】:
>>> import re
>>> myre = re.compile(r"\w{4,}")
>>> myre.findall('Lorem, ipsum! dolor sit? amet...')
['Lorem', 'ipsum', 'dolor', 'amet']

请注意,在 Python 3 中,所有字符串都是 Unicode,这也会找到使用非 ASCII 字母的单词:

>>> import re
>>> myre = re.compile(r"\w{4,}")
>>> myre.findall('Lorem, ipsum! dolör sit? amet...')
['Lorem', 'ipsum', 'dolör', 'amet']

在 Python 2 中,您必须使用

>>> myre = re.compile(r"\w{4,}", re.UNICODE)
>>> myre.findall(u'Lorem, ipsum! dolör sit? amet...')
[u'Lorem', u'ipsum', u'dol\xf6r', u'amet']

【讨论】:

    【解决方案2】:

    这是 Python 中列表推导的一个典型用例,它可以 用于过滤:

    text = 'Lorem ipsum dolor sit amet'
    result = [word for word in  pattern.findall(text) if len(word) > 3]
    

    【讨论】:

    • 但是如果我有“Lorem, ipsum”呢?此表达式将返回“Lorem”、“ipusm”。我不需要逗号。
    • 好的——我更新了它以实际使用正则表达式——另一个答案是假设你甚至不需要正则表达式。正则表达式的“findall”方法是您所缺少的。
    【解决方案3】:

    pattern = re.compile("\w\w\w(\w+)")
    result = pattern.search('Lorem ipsum dolor sit amet').groups()

    【讨论】:

      【解决方案4】:
      pattern = re.compile(r'(\S{4,})')
      pattern.findall('Lorem ipsum dolor sit amet')
      ['Lorem', 'ipsum', 'dolor', 'amet']
      

      【讨论】:

      • 无视我的回答。蒂姆·皮茨克 (Tim Pietzcker) 处理“坐下?”等案件。正确
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 2014-12-23
      • 2014-10-22
      • 2018-07-18
      相关资源
      最近更新 更多