我有一个file.txt
文件,如下所示:
this is first line new line1
this is second line new line2
new( line added ) new line3
this is third line new line4
this is fourth line_1 new line5
从这我需要检查某些字符串是否存在于文件中,如果存在需要做一些行动。
这是当前代码:
import re
with open("file.txt", "r") as f:
first = False
second = False
third = False
fourth = False
for line in f:
for str in line.split():
pattern = re.compile('this|is|first|line')
if pattern.match(str):
first = True
continue
pattern = re.compile('this|is|second|line')
if pattern.match(str):
second = True
continue
if(first == True):
print("something1")
else:
print("not found first")
exit()
if(second == True):
print("something2")
else:
print("not found second")
exit()
但当前输出为:
something1
not found second
但是expected code
这个:
something1
something2
第二行出现在文件中,但仍在打印else条件。(注意:字符串的检查应按此顺序进行。即,如果第一个条件不存在,则应退出,不进行进一步检查)
2条答案
按热度按时间dzhpxtsq1#
单词或短语模式是正则表达式--只是非常简单的模式。在正则表达式中,大多数字符(包括字母和数字)都代表它们自己。例如,正则表达式模式1匹配字符串'1',模式boy匹配字符串'boy'。
有许多保留字符称为中继字符,它们不会在正则表达式中表示本身,但它们有特殊的意义,可用来建立复杂的模式。这些中继字符如下:.、*、[、]、、$和。
watbbzwu2#
您的程序存在多个问题:
first
和second
没有被重置回false(我将其移到了外部循环的主体中,因此它们现在是false)。1.当第二行与第一个模式不匹配时,调用
exit()
,这将中止整个程序。1.前面提到的问题,第一个正则表达式也匹配第二行的
"this"
。如果它们是互斥的,可能不应该。其他问题:
1.您不需要对行进行
split()
并对其进行迭代。1.在循环内调用
re.compile
会影响性能。在循环外调用它可以加快程序的运行速度。1.您可以只使用
if (pattern.match(line))
,而不用将True/False赋给其他变量。修复的错误:
所有问题已修复,代码为DRY-ed,等等: