匹配
用來驗(yàn)證字符串的格式劝堪。
匹配不通過返回None,通過的話可以用ma.group(0)獲得匹配結(jié)果榴嗅。
import re
ma = re.compile(r'^[a-z]+$').match('5ha-v44v') #match對(duì)象拇惋,不匹配返回None
ma == None #True
搜索
match總是從開頭匹配周偎,search沒有限制。
ma=re.compile(r'[a-z]+').match('5ha-v44v') # No match
se=re.compile(r'^[a-z]+$').search('5ha-v44v') #match
se2=re.compile(r'[a-z]+').search('5ha-v44v') #match
print(ma,se,se2.group(0)) #輸出None None ha
提取
findall搜索返回字符串?dāng)?shù)組撑帖,所以也可以用來提取蓉坎。
ma=re.compile(r'[a-z]+').findall('88') # []
ma2=re.compile(r'[a-z]+').findall('5ha-v44d') #['ha', 'v', 'd']
print(ma,ma2) #輸出[] ['ha', 'v', 'd']
finditer可以用來返回結(jié)果字符串的位置。
ma=re.compile(r'[a-z]+').finditer('5ha-v44d') #['ha', 'v', 'd']
for m in ma:
print(m.start(),m.end(),m.group(0))
復(fù)雜提取
利用[..]()提取符合匹配的字符串胡嘿。
利用(.+?)提取被特定字符包裹的字符串蛉艾。
a=re.compile(r'[0-9\.]+').findall('1.3萬/月') #['1.3']
b=re.compile(r'3(.+?)月').findall('1.3萬/月') #['萬/']
print(a,b) #['1.3'] ['萬/']
(?P<name>)結(jié)合groupdict()可以獲得單個(gè)內(nèi)容。
m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcolm Reynolds")
m.groupdict() #{'first_name': 'Malcolm', 'last_name': 'Reynolds'}
(?<=...)表示只取在...之后位置范圍內(nèi)的。
m = re.search('(?<=-)\w+', 'spam-egg')
m.group(0) #'egg'
flag參數(shù)
re.I 忽略大小寫
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當(dāng)前環(huán)境
re.M 多行模式
re.S 即為' . '并且包括換行符在內(nèi)的任意字符(' . '不包括換行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數(shù)據(jù)庫(kù)
re.X 為了增加可讀性勿侯,忽略空格和' # '后面的注釋
每個(gè)人的智能新時(shí)代
如果您發(fā)現(xiàn)文章錯(cuò)誤,請(qǐng)不吝留言指正助琐;
如果您覺得有用祭埂,請(qǐng)點(diǎn)喜歡;
如果您覺得很有用兵钮,歡迎轉(zhuǎn)載~
END