如何使用正则表达式查找匹配词?
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
项目都带有转义的特殊字符并按长度降序排列。
我在一个超过 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
项目都带有转义的特殊字符并按长度降序排列。