我正在尝试在python中过滤包含字符串完全匹配的文件中的行。 首先,我编写了以下代码部分,
lines = ["z = xxx; %eflee","x = eee ; %flee"]
for lineNo,line in enumerate(lines):
tags = ["flee"]
for tag in tags:
if tag in line:
print(line)
所需的输出:
x = eee ; %flee
获得的输出:
z = xxx; %eflee
x = eee ; %flee
有人可以解释如何获得所需的输出吗?
答案 0 :(得分:1)
以下是将每个标签仅作为一个整体匹配的方法:
import re
lines = ["z = xxx; %eflee","x = eee ; %flee"]
for lineNo,line in enumerate(lines):
tags = ["flee"]
for tag in tags:
if re.search(r'\b%s\b' % tag, line):
print(line)
输出:
x = eee ; %flee
r'\ bflee \ b'是仅与整个单词'flee'匹配的正则表达式。之所以起作用,是因为'\ b'表示仅在单词边界匹配。
如果可以在一行中匹配两个标签,并且又不想两次打印同一行,则应在同一行缩进级别的“ print(line)”下放置“ break”。
您不使用lineNo。如果确实不需要,可以将“ for”行更改为:
for line in lines:
答案 1 :(得分:1)
import re
lines = ["z = xxx; %eflee","x = eee ; %flee"]
tags = ["flee"]
pattern = "|".join([" %{} ?".format(t) for t in tags])
# pattern: ' %flee ?'
regex = re.compile(pattern)
for lineNo,line in enumerate(lines):
if regex.search(line):
print(line)