Python re模塊


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']
  • search(正則表達式,待匹配的字符串)
# 功能:匹配從左到右所有符合的,只返回一個值
# 返回值: 返回的是一個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())


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM