【问题标题】:Python - re.findall returns unwanted resultPython - re.findall 返回不需要的结果
【发布时间】:2013-04-09 08:46:27
【问题描述】:
re.findall("(100|[0-9][0-9]|[0-9])%", "89%")

这仅返回结果[89],我需要返回整个 89%。请问有什么办法吗?

【问题讨论】:

  • 把它变成一个字符串; "89%"

标签: python regex findall


【解决方案1】:
>>> re.findall("(?:100|[0-9][0-9]|[0-9])%", "89%")
['89%']

当有捕获组时findall 仅返回捕获的部分。使用?: 防止括号成为捕获组。

【讨论】:

  • 100|[0-9][0-9]|[0-9] 更改为\d{1,3} 会改变模式的意图吗?
【解决方案2】:

简单的解决方案:

>>> re.findall("(100%|[0-9][0-9]%|[0-9]%)","89%")
['89%']

更漂亮的解决方案:

>>> re.findall("(100%|[0-9]{1,2}%)","89%")
['89%']

最漂亮的解决方案:

>>> re.findall("(?:100|[0-9]{1,2})%","89%")
['89%']

【讨论】:

    【解决方案3】:

    使用外部组,内部组为非捕获组:

    >>> re.findall("((?:100|[0-9][0-9]|[0-9])%)","89%")
    ['89%']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多