【发布时间】:2020-07-23 07:30:29
【问题描述】:
我正在使用 RegEx 从 txt 文件中提取一些数据。我制作了以下 for 循环来提取电子邮件和生日,并(尝试)将输出附加到列表中。但是当我打印我的列表时,只打印第一个附加的输出。 birtdate RegEx 在单独运行时工作正常。我确定我在做一些非常基本的错误。
f = open("/Users/me/Desktop/scrape.txt", "r", encoding="utf8")
list = []
for i in f:
if re.findall(r"((?i)[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.])", i):
list.append(i)
for k in f:
if re.findall(r'\d\d-\d\d-\d\d\d\d', k):
list.append(k)
print(list)
f.close()
【问题讨论】:
-
不是答案,只是注意到您在第一个模式中使用了不区分大小写的修饰符
(?i)。所以你可以摆脱A-Z。同样在您的第二个正则表达式中 >\d\d\d\d最好写成\d{4} -
当您进入第二个循环时,您的迭代器
f已经到达文件末尾 (EOF)。所以你要么需要在第二个循环之前做f.seek(0),要么只需要|两个正则表达式,我认为管道两个正则表达式应该可以正常工作