如何使用正则表达式查找匹配词?

How to find matching words using regex?

我在一个超过 2000 行的文本文件中有字符串,例如:

cool.add.come.ADD_COPY
add.cool.warm.ADD_IN
warm.cool.warm.MINUS
cool.add.go.MINUS_COPY

我有一个包含 200 多个匹配词的列表,例如:

store=['ADD_COPY','add.cool.warm.ADD_IN', 'warm.cool.warm.MINUS', 'MINUS_COPY']

我在代码中使用正则表达式

def all(store, file):
    lst=[]
    for match in re.finditer(r'[\w.]+', file):
        words = match.group()
            if words in store:
                lst.append(words) 
    return lst 

然后我循环检查需求。

我得到的输出:

add.cool.warm.ADD_IN
warm.cool.warm.MINUS

如果我将标识符更改为 \w+,那么我只会得到:

ADD_COPY
MINUS_COPY

所需输出:

add.cool.warm.ADD_IN
warm.cool.warm.MINUS   
ADD_COPY
MINUS_COPY

您似乎只想使用列表理解来获得结果:

results = set([item for item in store if item in text])

如果您需要正则表达式(如果您打算只匹配整个单词,或者只在特定上下文中匹配您的 store 项目),您可以使用

获得匹配项
import re
text="""cool.add.come.ADD_COPY
add.cool.warm.ADD_IN
warm.cool.warm.MINUS
cool.add.go.MINUS_COPY"""

store=['ADD_COPY','add.cool.warm.ADD_IN', 'warm.cool.warm.MINUS', 'MINUS_COPY']
rx="|".join(sorted(map(re.escape, store), key=len, reverse=True))
print(re.findall(rx, text))

正则表达式看起来像

add\.cool\.warm\.ADD_IN|warm\.cool\.warm\.MINUS|MINUS_COPY|ADD_COPY

查看 regex demo,基本上,您所有的 store 项目都带有转义的特殊字符并按长度降序排列。