標籤:替代 分行符號 re模組 findall price number 正則表達 就是 sub
re 模組,正則匹配操作Regex常用匹配規則:
.匹配任一字元,但是不能匹配分行符號
\d匹配任一數字
\D匹配任意的非數字
\s匹配的是空白字元(包括:\n,\t,\r和空格)
\w匹配的是a-z和A-Z以及數字和底線
\W匹配的是和\w相反的
[]組合的方式,只要滿足中括弧中的某一項都算匹配成功
之前講到的幾種匹配規則,其實可以使用中括弧的形式來進行替代:
\d:[0-9]
\D:0-9
\w:[0-9a-zA-Z_]
\W:[^0-9a-zA-Z_]
匹配多個字元:
*:可以匹配0或者任意多個字元
+:可以匹配1個或者多個字元
?:匹配的字元可以出現一次或者不出現(0或者1)
{m}:匹配m個字元
{m,n}:匹配m-n個字元
^(脫字型大小):表示以...開始
$:表示以...結束
|:匹配多個運算式或者字串
貪婪模式:Regex會匹配盡量多的字元。預設是貪婪模式。
非貪婪模式:Regex會盡量少的匹配字元。
re模組中常用函數:
match:從開始的位置進行匹配。如果開始的位置沒有匹配到。就直接失敗了。
text = ‘hello‘ret = re.match(‘h‘,text)print(ret.group())>> h
search:
在字串中找滿足條件的字元。如果找到,就返回。說白了,就是只會找到第一個滿足條件的。
text = ‘apple price $99 orange price $88‘ret = re.search(‘\d+‘,text)print(ret.group())>> 99
group 分組:
在Regex中,可以對過濾到的字串進行分組。分組使用圓括弧的方式。
group:和group(0)是等價的,返回的是整個滿足條件的字串。
groups:返回的是裡面的子組。索引從1開始。
group(1):返回的是第一個子組,可以傳入多個。
text = "apple price is $99,orange price is $10"ret = re.search(r".*(\$\d+).*(\$\d+)",text)print(ret.group())print(ret.group(0))print(ret.group(1))print(ret.group(2))print(ret.groups())
findall:
找出所有滿足條件的,返回的是一個列表。
text = ‘apple price $99 orange price $88‘ret = re.findall(‘\d+‘,text)print(ret)>> [‘99‘, ‘88‘]
sub:
用來替換字串。將匹配到的字串替換為其他字串。
text = ‘apple price $99 orange price $88‘ret = re.sub(‘\d+‘,‘0‘,text)print(ret)>> apple price $0 orange price $0
split:
使用Regex來分割字串。
text = "hello world ni hao"ret = re.split(‘\W‘,text)print(ret)>> ["hello","world","ni","hao"]
compile:
對於一些經常要用到的Regex,可以使用compile進行編譯,後期再使用的時候可以直接拿過來用,執行效率會更快。
text = "the number is 20.50"r = re.compile(r""" \d+ # 小數點前面的數字 \.? # 小數點 \d* # 小數點後面的數字 """,re.VERBOSE)ret = re.search(r,text)print(ret.group())
Regex和re模組