正则表达式re模块
請從以下文件里取出所有的手機號:
姓名 地區 身高 體重 電話
況詠蜜 北京 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
更簡單的如下:
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 testimport 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('不是手機號')總結
- 上一篇: 第2章 数据归一化
- 下一篇: 日常SQL常见问题(二)