【问题标题】:Regex for finding matches in a list Python用于在列表 Python 中查找匹配项的正则表达式
【发布时间】:2019-05-20 15:47:04
【问题描述】:

我目前正在遍历一些文件(工作得很好)并试图弄清楚如何获取某些东西的索引并查看它匹配的单词是否可以在提供的列表中找到。

例如:

我在其中一个文件中有以下内容:

MYLIST['APPLE'] = 'Granny-Smith'
SOMETHINGELSE['BUILDING'] = 'Tall'
ANOTHERTHING['SPELLING'] = 'bad'
ADDITIONALLY['BERRY'] = 'Rasp'

我有一个我想要匹配的东西的列表:

keywords = ['apple', 'berry', 'grape']

如果我使用这个正则表达式,它会发现索引没问题(但都能找到):

\[(.*?)\]

但我正在尝试扩展该正则表达式,以便它只会找到关键字列表中存在的那些。

我还需要向正则表达式添加什么才能完成此操作?

【问题讨论】:

    标签: python regex


    【解决方案1】:

    如果你有几个单词,你可以只使用正则表达式,但是如果你有大量的单词,那么将正则表达式和普通搜索结合起来更合理:

    import re
    
    data = [
        "MYLIST['APPLE'] = 'Granny-Smith'",
        "SOMETHINGELSE['BUILDING'] = 'Tall'",
        "ANOTHERTHING['SPELLING'] = 'bad'",
        "ADDITIONALLY['BERRY'] = 'Rasp'"
    ]
    
    REGEX = re.compile(r"\['(?P<word>.*?)'\]")
    words = ['apple', 'berry', 'grape']
    
    for line in data:
        found = REGEX.search(line)
        if found:
            word = found.group('word').lower()
            if word in words:
                print('FOUND: ', word)
    

    将打印:

    FOUND:  apple
    FOUND:  berry
    

    这种技术也更好,因为正则表达式更简单且更具可读性,因此更容易调试和修改此代码。

    【讨论】:

      【解决方案2】:

      如果你只想使用正则表达式,你可以使用:

      keywords = ['apple', 'berry', 'grape']
      regex = "\[({})\]".format("|".join(keywords))
      

      我将把大写/小写留给你。

      从这里how to do re.compile() with a list in python 得到这个想法,所以支持它。

      【讨论】:

        猜你喜欢
        • 2016-03-25
        • 1970-01-01
        • 1970-01-01
        • 2016-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-26
        相关资源
        最近更新 更多