邮箱的规则是:名称@域名。
邮箱名称的规则:由英文字母、数字、下划线组成。
邮箱域名的规则:由英文字母、数字、下划线、"."组成。一般常见的域名都是一级域名,例如[email protected],还有很多其他的多级域名,例如[email protected]
名称:\w+(解析:\w表示字母、数字、下划线,+表示1个或者多个)
域名: \w+(\.\w+)+
解析域名:
- 第一个\w+表示紧跟@后面的字符;
- (\.\w+)+:\.表示只可以匹配. (\.\w+)只可以匹配一级域名,后面加上+可以匹配一级或者多级域名(PS:也可以使用(\.\w+){1,})表示匹配一级或者多级域名
邮箱的正则表达式:\w+@\w+(\.\w+)+
- 邮箱在列表里面进行正则匹配
import re
s=["[email protected]","[email protected]","[email protected]"]
pattern = re.compile(r"\w+@\w+(\.\w+)+")
print(type(pattern))
list1 = []
for i in s:
object1 = pattern.search(i)
if object1:
list1.append(object1.group())
else:
print("%s不是正确的邮箱格式" %i)
print("list1=",list1)
#执行结果:
<class '_sre.SRE_Pattern'>
[email protected]不是正确的邮箱格式
list1= ['[email protected]', '[email protected]']
- 邮箱在文件里面进行正则匹配
import re
list2 = []
pattern = re.compile(r"\w+@\w+(\.\w+)+")
with open("E:\\Python_Question\\file.txt") as file_obj:
for line in file_obj:
object2 = pattern.search(line)
if object2:
list2.append(object2.group())
else:
print("%s里面的邮箱格式不正确" %line)
print("list2=",list2)
#执行结果:
第三行的内容:[email protected]里面的邮箱格式不正确
list2= ['[email protected]', '[email protected]']
#file.txt的内容如下:
第一行的内容:[email protected]
第二行的内容:[email protected]
第三行的内容:[email protected]
PS:邮箱的表达式没有使用开头^和结尾$符合,如果写成^\w+@\w+(\.\w+)+$,在文件里面就匹配不了邮箱,因为^要求每一行内容的开头要满足邮件,file.txt文件里的开头不满足开头要求