【问题标题】:How to match part of string using regex in python?如何在python中使用正则表达式匹配部分字符串?
【发布时间】:2022-07-21 18:05:34
【问题描述】:

这是字符串:

SCOPE OF WORK: Supply &  Flensburg House, MMDA Colony,     PAN#: AAYCS8310G
installation Arumbakkam,Chennai,Tamil Nadu,
  xxxxxx

字符串中会改变的东西是:

Flensburg House, MMDA Colony,

Arumbakkam,Chennai,Tamil Nadu,

字符串的这些部分可以包含字母、数字、逗号、#、-和_

字符串的其余部分将保持原样,包括间距。

这是我正在使用的正则表达式

SCOPE OF WORK: Supply &  [A-Za-z,\s]]*PAN#: [A-Z]{5}[0-9]{4}[A-Z]{1}\n    installation [A-Za-z]\n      xxxxxx

最终我需要得到的是:

Flensburg House, MMDA Colony,     
installation Arumbakkam,Chennai,Tamil Nadu,

我认为我的正则表达式并不完全正确,我需要有关如何解决此问题的帮助。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    关于您当前的模式,我注意到了几点:

    • 您正在尝试匹配比文本中更多的空格字符;
    • 两个子字符串的字符类别不同。第二个缺少空格和逗号,也只匹配一次。 + 目前两者都缺少# 符号和数字;

    假设您只需要分组获取这两个子字符串(不包括结尾的逗号),请尝试:

    ^SCOPE OF WORK: Supply &  ([\w, #-]+),\s+PAN#: [A-Z]{5}[0-9]{4}[A-Z]\s+installation ([\w, #-]+),\s+x{6}$
    

    在线查看demo


    • ^ - 起跑线锚点;
    • SCOPE OF WORK: Supply & - 此子字符串的文字匹配,包括两个尾随空格;
    • ([\w, #-]+) - 第一个捕获组匹配来自给定类的 1+ 个字符,其中 \w[A-Za-z0-9_] 的简写,您提到的所有字符都需要包括在内;
    • ,\s+PAN#: - 此子字符串的文字匹配,包括结尾的逗号和 1+ 个空格字符;
    • [A-Z]{5}[0-9]{4}[A-Z] - 验证后面是 5 个大写字母、4 个数字和一个大写字母(无需量化单个字符);
    • \s+installation - 1+ 个空格字符,包括换行符和尾随空格;
    • ([\w, #-]+) - 第二个捕获组与第一个组匹配相同的模式;
    • ,\s+x{6} - 匹配尾随逗号、1+ 空格字符和 6 个尾随 x;
    • $ - 结束线锚。

    import re
    
    s = """SCOPE OF WORK: Supply &  Flensburg House, MMDA Colony,     PAN#: AAYCS8310G
    installation Arumbakkam,Chennai,Tamil Nadu,
      xxxxxx"""
      
    l = re.findall(r'^SCOPE OF WORK: Supply &  ([\w, #-]+),\s+PAN#: [A-Z]{5}[0-9]{4}[A-Z]\s+installation ([\w, #-]+),\s+x{6}$', s)
    
    print(l)
    

    打印:

    [('Flensburg House, MMDA Colony', 'Arumbakkam,Chennai,Tamil Nadu')]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2015-10-25
      • 2020-11-29
      • 2011-11-28
      • 1970-01-01
      • 2012-11-25
      相关资源
      最近更新 更多