过滤包含字符串完全匹配的行

时间:2019-02-26 04:10:36

标签: python

我正在尝试在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

有人可以解释如何获得所需的输出吗?

2 个答案:

答案 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)