python - 查找包含电子邮件地址的所有行
问题描述
我尝试保存包含电子邮件地址的文件中的所有行。
例如,file.txt:
Lorem ipsum dolor email1@mail.com sit amet,
consectetur adipiscing elit
sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam
email2@gmail.com quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat
non proident email3@yahoo.com
sunt in culpa qui officia deserunt mollit anim id est laborum.
从 file.txt 我只想保存以下行:
Lorem ipsum dolor email1@mail.com sit amet,
email2@gmail.com quis nostrud exercitation ullamco
non proident email3@yahoo.com
我尝试了一些东西,但正则表达式让我很头疼:(
import re
def saveresults(var):
with open("email-lines.txt", 'a') as target:
target.write(var+ '\n')
target.close()
print " line writed: ", var
file = "test.txt"
emaillines = [linie.rstrip('\n') for linie in open(file)]
for i in emaillines:
a = re.findall(r"(^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,63}$)", i)
print a
我做错了什么?
解决方案
您的正则表达式以^
(start-of-string anchor) 开头并以$
(end-of-string anchor) 结尾,这意味着电子邮件地址必须是整行,并且该行没有其他内容,以便正则表达式匹配。您也在使用[A-Z]
but not a-z
,并且您没有使用不区分大小写的标志,这意味着电子邮件地址中的小写字母将不起作用。
改成:
pattern = re.compile(r"(?i)[\w.%+-]+@[a-z\d.-]+\.[a-z]{2,63}")
for i in lines:
if pattern.search(i):
print(i)
(?i)
使正则表达式不区分大小写,并且包含的字符集意味着这些字符在大多数情况下[0-9A-Za-z_]
都可以替换为。\w
推荐阅读
- c - #include .c 源文件是否可以用于嵌入式 C 代码的可维护性?
- django - 未使用 CROS 设置 Django 会话
- hadoop - 无法在 GCP 上打开 cloudera 管理器
- angular - Angular http请求可观察错误没有捕获错误?
- javascript - 为什么图像未找到错误出现在角度 6 中?
- maven - 如何解决“在当前项目和插件组中找不到前缀'surefire_report'的插件”
- credential-manager - FIDO2 硬件上架,但它带来了哪些限制?
- android - Android - 在执行另一个类的任务时显示进度对话框
- angular - 无法打印包含在另一个对象列表中的对象列表
- php - 具有多种自定义帖子类型的永久链接(404 错误)