【问题标题】:Regex in python, find a range of lengthspython中的正则表达式,找到一个长度范围
【发布时间】:2018-02-12 15:44:26
【问题描述】:

我正在对字符串进行正则表达式以查找特定模式:

fileName = '123456_BI12554_AA_0021.jpg'
id = re.findall(r'(_BI\d{5}_)', fileName)

找到_BI12554_,但有时有 6 个数字,而不仅仅是 5 个。

有没有办法找到_BI_之间的所有数字,不管有多少?

【问题讨论】:

  • 为什么不re.findall(r'(_BI\d+_)', fileName)

标签: python regex


【解决方案1】:

当然可以:您可以使用+ 来表示“1 个或多个”数字。

re.findall(r'(_BI\d+_)', fileName)

【讨论】:

  • 非常感谢!
【解决方案2】:

如果您知道它将是 5 或 6,您可以稍微修改您的模式以允许这样做:

import re

fileNames = ['123456_BI12554_AA_0021.jpg', '123456_BI125546_AA_0021.jpg']
for fileName in fileNames:
    print(re.findall(r'(_BI\d{5,6}_)', fileName))
#_BI12554_
#_BI125546_

这里的符号\d{5,6} 表示匹配 5 到 6 位(含)。

【讨论】:

    【解决方案3】:

    您只需要使用\d+ 来检查是否出现一个或多个数字。

    例如:

    >>> re.findall(r'(_BI\d+_)', '123456_BI12554_AA_0021.jpg')
    ['_BI12554_']
    >>> re.findall(r'(_BI\d+_)', '123456_BI125548487387378378_AA_0021.jpg')
    ['_BI125548487387378378_']
    >>> re.findall(r'(_BI\d+_)', '123456_BI1_AA_0021.jpg')
    ['_BI1_']
    

    【讨论】:

      【解决方案4】:

      您可以在(?<=: 后面使用肯定的回溯:然后是一位或多位数字\d+

      (?<=_BI)\d+

      这将为您提供 _BI 和 _ 之间的所有数字。

      使用_BI\d+_ 选择_BI、一位或多位数字\d+ 和下一个下划线_

      【讨论】:

        猜你喜欢
        • 2015-05-18
        • 2018-09-13
        • 1970-01-01
        • 2015-03-24
        • 2016-08-10
        • 1970-01-01
        • 2013-07-14
        • 1970-01-01
        • 2021-07-02
        相关资源
        最近更新 更多