re模塊
常用方法
- 用於使用正則表達式匹配對應的字符串
- 最常用的有三分別是find_all search match
-
findall(正則表達式,待匹配的字符串)
#findall
# 功能:匹配字符串中所有符合條件的
# 返回值:列表,會將所有匹配到的項加入到列表中返回
import re
phone_num = '17344332233' # 待匹配的字符串
regex = r'^1[3-9]\d{9}$' # 匹配手機號使用的正則
ret = re.findall(regex,num)
print(ret)
# findall和分組的關系
ret = re.findall('\d(\d)', 'a1,b22,c345')
print(ret) # [2,4]
ret = re.findall('\d(?:\d)', 'a1,b22,c345')
print(ret) # ['22', '34']
# 功能:匹配從左到右所有符合的,只返回一個值
# 返回值: 返回的是一個re自定義類型
num = '17344332233'
regex = r'^1[3-9]\d{9}$'
ret = re.search(regex,num)
print(ret)
if ret:
print('是合法的手機號碼 %s' % num)
else:
print('不是合法的手機號碼')
#serach取分組中的內容:根據序號取,根據組名取
ret = re.search('(?P<num1>\d)(?P<num2>\d)', 'a1,b28,c345')
print(ret.group(0))
print(ret.group(1))
print(ret.group(2))
print(ret.group('num1'))
print(ret.group('num2'))
# 分組的引用 ?P=num1表示引用了num1分組,匹配到的內容必須和num1分組中的內容一模一樣
ret = re.search('(?P<num1>\d)(?P=num1)','a14,b22,c3357')
print(ret.group())
-
match(正則表達式,帶匹配的字符串) - 匹配用戶輸入的內容是否合法時候都是用match
# 功能:從頭開始匹配,如果開始部分匹配到后則匹配成功,否則匹配失敗
# 返回值: re自定義類型
num = '17344332233'
regex = r'1[3-9]\d{9}$'
ret = re.match(regex, num)
if ret:
print(ret)
print('是合法的手機號碼 %s' % num)
else:
print('不是合法的手機號碼')
# 相當於search方法在正則前加上^
# split 根據正則表達式切割
ret = re.split(r'\d+',r'alex123mhy345aa33')
print(ret)
# sub 根據正則表達式,將匹配到的字符串替換成對應的(正則表達式,要替換的內容,待匹配的字符串,要替換的個數)
ret = re.sub(r'\d+','4',r'alex123mhy345aa33',1)
print(ret)
# 結果: alex4mhy4aa4
# 替換方法2:返回的是一個元組,第一個元素是替換結果,第二個是替換次數
ret = re.subn(r'\d+','4',r'alex123mhy345aa33')
print(ret)
# 結果: ('alex4mhy4aa4', 3)
# compile 預編譯 預先來編譯一下我們寫好的正則
rule = re.compile(r'\d+')
ret = rule.findall('alex123eva456')
print(ret)
ret = rule.findall('手機號碼13737373377\n身份證號 110107197712072277')
print(ret)
# 結果:['123', '456'] ['13737373377', '110107197712072277']
# finditer將匹配到的內容,返回成一個迭代器,循環取出來的是一個re自定義類型,通過group方法取值,可以節省內存空間
ret = re.finditer('\d', 'alex1916936916598sb7985073495898632847')
print(ret)
for i in ret:
print(i.group())