请从以下文件里取出所有的手机号:
姓名 地区 身高 体重 电话
况咏蜜 北京 171 48 13651054608
王心颜 上海 169 46 13813234424
马纤羽 深圳 173 50 13744234523
乔亦菲 广州 172 52 15823423525
罗梦竹 北京 175 49 18623423421
刘诺涵 北京 170 48 18623423765
岳妮妮 深圳 177 54 18835324553
贺婉萱 深圳 174 52 18933434452
叶梓萱 上海 171 49 18042432324
杜姗姗 北京 167 49 13324523342
f = open("联系方式.txt",'r',encoding="gbk")
phones = []
for line in f:
name,city,height,weight,phone = line.split()
if phone.startswith('1') and len(phone) == 11:
phones.append(phone)
print(phones)
更简单的如下:
import re
phone_list = re.findall("[0-9]{11}",f.read())
print(phone_list)
re.match 从头开始匹配
re.search 匹配包含 , 有一个就返回
re.findall 把所有匹配到的字符放到以列表中的元素返回
# '.'默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
# print(re.search(".","alex"))
# print(re.search(".","alex").group())
# print(re.search(".","\n"))
# '^'配字符开头,'$'匹配字符结尾
# print(re.search("^alex","alexli"))
# print(re.search("^alex","alexli").group())
# print(re.search("^alex$","alexli"))
# '*'匹配*号前的字符0次或多次
# print(re.search("a*","ddddd"))
# print(re.search("a*","addddd"))
# print(re.search("a*","aaaaddddd"))
# '+'匹配前一个字符1次或多次
# print(re.search("a+","aaaaaddsaaadd"))
# print(re.search("a+","ddsaaadd"))
# print(re.search("a+","dddd"))
# '?'匹配前一个字符1次或0次
# print(re.search("a?","aaadddd"))
# print(re.search("a?","dddd"))
# '{m}'匹配前一个字符m次
# print(re.search("a{3}","aaddddd"))
# print(re.search("a{3}","aaaddddd"))
# '{n,m}' 匹配前一个字符n到m次
# print(re.search("a{3,5}","aaadddddd"))
# print(re.search("a{3,5}","aaaaaaddadddd"))
# print(re.findall("ab{1,3}","abbabcabbcbbb"))
# '|' 匹配|左或|右的字符
# print(re.search("abc|ABC","ABCBabcCD"))
# print(re.search("absc|ABsC","ABCBabcCD"))
# '(...)' 分组匹配
# print(re.search("(abc){2}a(123|45)", "abcabca456c").group())
# print(re.search("(abc){2}a(123|45)", "abcabca123c"))
# print(re.search("(abc){2}a(123|45)", "abc-abca123c"))
# '\A'只从字符开头匹配
# print(re.search("\Aabc","alexabc"))
# print(re.search("\Aabc","abcalexabc"))
# '\Z' 匹配字符结尾,同$
# print(re.search("\Aabc\Z","abc"))
# []
# print(re.search("[a-z]","jack"))
# print(re.search("[a-zA-Z0-9]{3}","jack"))
# \d'匹配数字0-9
# print(re.search("\d","sfdhohfow1454"))
# print(re.search("\d{3}","sfdhohfow1454"))
# print(re.search("\d+","sfdhohfow1454"))
# '\D' 匹配非数字
# print(re.search("\D+","sfdhohfow1454"))
# print(re.findall("\D+","sfdh2s23dfoh5fow1454"))
# print(re.findall("\d+","sfdh2s23dfoh5fow1454"))
# '\w'匹配[A-Za-z0-9],'\W'匹配非[A-Za-z0-9]
# print(re.findall("\w+","sfwetfwsdfs56416"))
# print(re.findall("\W+","sfwetfwsdfs56416"))
# print(re.findall("\W+","sfwetfws=dfs56416"))
# 's' 匹配空白字符、\t、\n、\r ,
# print(re.findall("\s","asdfsa\ndfsl\rjfdsld\t"))
# '(?P...)' 分组匹配
# id_num = "371481199306143631"
# print(re.search("([0-9]{3})([0-9]{3})([0-9]{4})", id_num))
# print(re.search("([0-9]{3})([0-9]{3})([0-9]{4})", id_num).groups())
# print(re.search("(?P<province>[0-9]{3})(?P<city>[0-9]{3})(?P<birthday>[0-9]{4})", id_num).groups())
# print(re.search("(?P<province>[0-9]{3})(?P<city>[0-9]{3})(?P<birthday>[0-9]{4})", id_num).groupdict())
# print(help(re))
# re.split 以匹配到的字符当做列表分隔符
# print(re.split("[0-9]","sjfld3jlsdfs4lkjl5sljfdw22jljsl5"))
# print(re.split("[0-9]{2}","sjfld3jlsdfs4lkjl5sljfdw22jljsl5"))
# print(re.split("[a-z]","sjfld3jlsdfs4lkjl5sljfdw22jljsl5"))
# print(re.findall("[0-9]","sjfld3jlsdfs4lkjl5sljfdw22jljsl5"))
re.sub 匹配字符并替换
# print(re.sub("abc","ABC","abcdefg"))
# print(re.sub("abc","ABC","abcdefgabc",count=2))
# print(re.sub("abc","ABC","abcdefgabc")) # 默认全部替换
# print(re.sub("[a-z]","0","abcdefgabc")) # 默认全部替换
# print(re.sub("[a-z]","0","abcdeAfgabc")) # 默认全部替换
re.fullmatch 全部匹配 ,精确匹配
# print(re.fullmatch("[a-z]","sahfwehnkbn"))
# print(re.fullmatch("a","sahfwehnkbn"))
# print(re.fullmatch("a","a"))
# print(re.fullmatch("aaaa","aaaa"))
# p = re.compile("[0-9]{11}") # 先编译好
# print(p.search("1234512346542354312"))
# Flags标志符
# print(re.search("efg","alexEFG"))
# print(re.search("efg","alexEFG",re.I)) # I,忽略大小写
# re.M(MULTILINE): 多行模式,改变’^’和’$’的行为
# print(re.search("^alex","mack\nalexjackrain"))
# print(re.search("^alex","mack\nalexjackrain",re.M))
# print(re.search("^alex$","mack\nalex\njackrain",re.M))
# re.S(DOTALL): 改变’.’的行为,使其还能匹配到\n
# print(re.search(".","\n"))
# print(re.search(".","\n",re.S))
# re.split(pattern, string, maxsplit=0, flags=0) 用匹配到的值做为分割点,把值分割成列表
# s='9-2*5/3+7/3*99/4*2998+10*568/14'
# print(re.split("[-\+\*/]",s))
# import my_package
# from my_package import test
import re
# 验证手机号是否合法
phone_pat = re.compile('^(13\d|14[5|7]|15\d|166|17[3|6|7]|18\d)\d{8}$')
phone_pat = re.compile('^1[3-5]\d{9}$')
while True:
phone = input('请输入您的手机号:')
res = re.search(phone_pat, phone)
if res:
print('正常手机号')
else:
print('不是手机号')