正則表達式
正則表達式通常都包含反斜杠'\',所以用r'\t'來來表示正則表達式字符串先较,r'a string'是強制不進行轉義陈辱,類似c#的@"a string"。
模式? ? ? ? ? ? ? ? ? 意義
^? ? ? ? ? ? ? ? ? ? ? ? 匹配字符串的開頭
$? ? ? ? ? ? ? ? ? ? ? ? 匹配字符串的末尾
.? ? ? ? ? ? ? ? ? ? ? ? ?匹配任意字符顾犹,除了換行符,當re.DOTALL標記被指定時褒墨,則可以匹配換行符
[...]? ? ? ? ? ? ? ? ? ? ?用來表示一組字符炫刷,單獨列出:[abc]匹配'a','b',或'c'
[^...]? ? ? ? ? ? ? ? ? ? 匹配不在[]中的字符;
re*? ? ? ? ? ? ? ? ? ? ? 匹配0個或多個的表達式郁妈;
re+? ? ? ? ? ? ? ? ? ? ? 匹配1個或多個的表達式浑玛;
re?? ? ? ? ? ? ? ? ? ? ?匹配0個或1個由前面的正則表達式定義的片段噩咪,非貪婪方式顾彰;
re{n,}? ? ? ? ? ? ? ? ? ?精確匹配n個前面表達式
re{n,m}? ? ? ? ? ? ? ? 匹配n到m次由前面的正則表達式定義的片段,貪婪方式胃碾;
a|b? ? ? ? ? ? ? ? ? ? ? ?匹配a或b
(re)? ? ? ? ? ? ? ? ? ? ? ?匹配括號內(nèi)的表達式涨享;
(?imx)? ? ? ? ? ? ? ? ? 正則表達式包含三種可選標志:i,m或x仆百。只影響括號內(nèi)的區(qū)域厕隧;
(?-imx)? ? ? ? ? ? ? ? ?正則表達式關閉i,m俄周,x可選標志吁讨。只影響括號內(nèi)的區(qū)域;
(?#...)? ? ? ? ? ? ? ? ? ?注釋峦朗;
\w? ? ? ? ? ? ? ? ? ? ? ? 匹配字母數(shù)字建丧,等價于[A-Za-z0-9]
\W? ? ? ? ? ? ? ? ? ? ? ? 匹配非字母數(shù)字,等價于[^A-Za-z0-9]
\s? ? ? ? ? ? ? ? ? ? ? ? ? 匹配任意空白字符波势,等價于[\t\n\r\f]翎朱;
\S? ? ? ? ? ? ? ? ? ? ? ? ?匹配任意非空白字符;
\d? ? ? ? ? ? ? ? ? ? ? ? ?匹配任意數(shù)字艰亮,等價于[0-9]
\D? ? ? ? ? ? ? ? ? ? ? ? 匹配任意非數(shù)字
\A? ? ? ? ? ? ? ? ? ? ? ? 匹配字符串開始
\Z? ? ? ? ? ? ? ? ? ? ? ? 匹配字符串結束闭翩,如果存在換行,只匹配到換行前的結束字符串
\z? ? ? ? ? ? ? ? ? ? ? ? 匹配字符串結束
\G? ? ? ? ? ? ? ? ? ? ? ? 匹配最后匹配完成的位置迄埃;
\b? ? ? ? ? ? ? ? ? ? ? ? ?匹配一個單詞邊界疗韵,eg。'er\b'可以匹配'never'的‘er’侄非,但是不能匹配'verb'的‘er’蕉汪;
\B? ? ? ? ? ? ? ? ? ? ? ? 匹配非單詞邊界流译,意義與\b相反;
\n,\t等? ? ? ? ? ? ? ? ? 匹配換行符者疤,制表符等
\1...\9? ? ? ? ? ? ? ? ? ?匹配第n個分組的內(nèi)容福澡;
\10? ? ? ? ? ? ? ? ? ? ? ?匹配第10個分組的內(nèi)容,如果它匹配驹马,否則值的是八進制字符嗎的表達式
Python正則表達式模塊
python正則表達式模塊為re革砸,import re,即可進行正則操作糯累。
re.match函數(shù)
re.match(pattern, string, flag=0)
pattern? 正則表達式
string? ? 要匹配的字符串
flag? ? ? ?標志位算利,用于控制正則表達式的匹配方式。如:re.I匹配大小寫不敏感泳姐;re.M多行匹配效拭。
re.match函數(shù)匹配成功返回匹配對象,否則返回None胖秒。
import re
line = "Cats are smarter than dogs"
matchObj = re.match(r'(.*) are (.*?) .*', line, re.M|re.I)
print(matchObj.group())
print(matchObj.group(0))
print(matchObj.group(1))
print(matchObj.group(2))
輸出:
Cats are smarter than dogs
Cats are smarter than dogs
Cats
smarter
正則表達式對象
re.RegexObject
re.complie()返回RegexObject對象缎患。
re.MatchObject
它的幾個方法:
start()返回匹配開始的位置
end()返回匹配結束的位置
span()返回一個元組包含匹配(開始,結束)的位置
re.search方法
re.search(pattern, string, flag=0)
search和match的區(qū)別:
match匹配字符串的開始阎肝,如果開始不符合正則表達式挤渔,則匹配失敗。search匹配整個字符串风题,知道找到一個匹配蚂蕴。
import re
line = "Cats are smarter than dogs"
matchobj1 = re.match(r'dogs', line, re.M|re.I)
if matchobj1:
? ? ? print("match --> matchobj.group():", matchobj1.group())
else:
? ? ? ?print("no match")
matchObj2 = re.search(r'dogs', line, re.M|re.I)
if matchObj2:
? ? ? print("search --> matchobj2.group():", matchObj2.group())
else:
? ? ? print("No match!!")
re.sub(pattern, repl, string, count=0)
pattern: 正則表達式
repl: 替換的字符串,也可以是一個函數(shù)
string 要被查找替換的原始字符串
模式匹配后替換的最大次數(shù)俯邓,默認為0表示替換所有的匹配。
phone ="2004-959-559 # 這是一個電話號碼"
num = re.sub(r'#.*$', "", phone)
print(num)
num2 = re.sub(r'\D', "", phone)
print(num2)
def double(matched):
? ? ? ?value =int(matched.group('value'))
? ? ? ?return str(value*2)
s ="ss12de4gh78"
print(re.sub(r'(?P<value>\d+)', double, s))
re.finditer
re.finditer(pattern, string, flags=0)
it = re.finditer(r'\d+', "123a45b67c78def9")
for matchin it:
? ? ? print(match.group())