【问题标题】:How to use regex in Python list如何在 Python 列表中使用正则表达式
【发布时间】:2015-10-05 13:06:11
【问题描述】:

我需要您的帮助,因为我想在列表中使用正则表达式来仅获取我的关键字之后的字符串。

my_list 看起来像:

 ['Paris, 458 boulevard Saint-Germain', 'Marseille, 29 rue Camille Desmoulins', 'Marseille, 1 chemin des Aubagnens']

正则表达式:

re.compile(ur'(?<=rue|boulevard|quai|chemin).*', re.MULTILINE)

处理后的预期列表:

['Saint-Germain', 'Camille Desmoulins', 'des Aubagnens']

感谢您的帮助。

【问题讨论】:

    标签: python regex list split


    【解决方案1】:

    您的正则表达式似乎在 Python 中不起作用,它抛出的错误是 look-behind requires fixed-width pattern

    另外,请注意,您的正则表达式中的 re.MULTILINE 标志是多余的,因为没有 ^$ 可以重新定义模式中的行为。

    这是你可以使用的代码:

    import re
    lst =  ['Paris, 458 boulevard Saint-Germain', 'Marseille, 29 rue Camille Desmoulins', 'Marseille, 1 chemin des Aubagnens']
    p = re.compile(r'.*(?:rue|boulevard|quai|chemin)')
    print [p.sub('', x).strip() for x in lst]
    

    IDEONE demo

    结果:

    ['Saint-Germain', 'Camille Desmoulins', 'des Aubagnens']
    

    r'.*(?:rue|boulevard|quai|chemin)' 正则表达式匹配

    • .* - 0 个或多个任意字符
    • (?:rue|boulevard|quai|chemin) - 以| 分隔的备选方案之一。

    然后用re.sub删除匹配的文本。

    注意您可以强制与\b 单词边界匹配整个单词,以便匹配chemin 而不是chemins

    r'.*\b(?:rue|boulevard|quai|chemin)\b'
    

    【讨论】:

      【解决方案2】:

      lookbehinds 需要在 python 正则表达式中具有恒定的宽度。
      试试这个更简单的正则表达式 -

      >>> regex = re.compile(ur'(?:rue|boulevard|quai|chemin)(.*)', re.MULTILINE)
      >>> [re.findall(regex, e)[0].strip() for e in my_list]
      ['Saint-Germain', 'Camille Desmoulins', 'des Aubagnens']
      

      编辑:
      使用不同的lookbehinds可以工作 -

      (?:(?<=rue)|(?<=boulevard)|(?<=quai)|(?<=chemin))(.*)
      

      示例 -

      >>> regex = re.compile(ur'(?:(?<=rue)|(?<=boulevard)|(?<=quai)|(?<=chemin))(.*)', re.MULTILINE)
      >>> [re.findall(regex, e)[0].strip() for e in li]
      ['Saint-Germain', 'Camille Desmoulins', 'des Aubagnens']
      

      【讨论】:

        猜你喜欢
        • 2015-08-02
        • 1970-01-01
        • 2015-11-06
        • 2018-09-15
        • 2013-11-24
        • 2019-04-01
        • 2013-01-26
        • 2012-09-02
        • 2012-03-16
        相关资源
        最近更新 更多