我想我会采取稍微不同的方式:
import re
all_the_data = ""
with open('Rapp.txt', 'r') as f:
for line in f:
if not re.search("\d{4}-\d{1,2}-\d{1,2};\n", line):
line = re.sub("\n", "", line)
all_the_data = "".join([all_the_data, line])
print (all_the_data)
有几种方法可以做到这一点,每种方法都有优点和缺点,但我认为这很简单。
像您所做的那样循环文件,如果该行不以日期和 ; 结尾去掉回车符,塞进all_the_data。这样您就不必再“查找”文件了。同样,有很多方法可以做到这一点。如果您更愿意使用以 3 个字母和 ; 开头的逻辑回顾过去,这是有效的:
import re
all_the_data = ""
with open('Rapp.txt', 'r') as f:
all_the_data = ""
for line in f:
if not re.search("^[A-Za-z]{3};", line):
all_the_data = re.sub("\n$", "", all_the_data)
all_the_data = "".join([all_the_data, line])
print ("results:")
print (all_the_data)
要求的差不多了。逻辑是,如果当前行开头不正确,则从 all_the_data 中取出前一行的回车符。
如果您需要使用正则表达式本身的帮助,这个网站很棒:http://regex101.com http://regex101.com