1.量詞符號(預設貪婪模式)
'''1) ? 匹配0個或者1個a '''
print
(re.findall(
'a?b'
,'abbzab abb aab'))
# ab b ab ab b ab
'''2) + 匹配1個或者多個a '''
print
(re.findall(
'a+b'
,'b ab aaaaaab abb'))
# ab aaaaaab ab
'''3) * 匹配0個或者多個a '''
print
(re.findall(
'a*b'
,'b ab aaaaaab abbbbbbb'))
# b ab aaaaaab ab b b b b b b
'''4) 匹配m個至n個a '''
# (1) 1 <= x <= 3
print
(re.findall(
'ab'
,'aaab ab aab abbb aaz aabb'))
# aaab ab aab ab aab
# (2) 前面修飾的a , 必須是2個字元
print
(re.findall(
'ab'
,'aaab ab aab abbb aaz aabb'))
# aab aab aab
# (3) 前面修飾的a , 至少是2個字元
print
(re.findall(
'ab'
,'aaab ab aab abbb aaz aabb'))
# aaab aab aab
2.貪婪模式 與 非貪婪模式
貪婪模式 : 預設向更多次匹配,底層用的是回溯演算法
非貪婪模式: 預設向更少次匹配,用乙個?號來進行修飾(修飾在量詞的身後)
回溯演算法: 從左向右進行匹配,一直到最後,直接最後再也匹配不到了,回頭,尋找最後乙個
'.'匹配任意字元,除了換行符\n
strvar =
"劉能和劉老根和劉鐵棍子777子888"
lst = re.findall(
"劉."
, strvar)
print
(lst)
# ['劉能', '劉老', '劉鐵']
# 貪婪模式
lst = re.findall(
"劉.?"
, strvar)
print
(lst)
# ['劉能', '劉老', '劉鐵']
lst = re.findall(
"劉.+"
, strvar)
print
(lst)
# ['劉能和劉老根和劉鐵棍子777子888']
lst = re.findall(
"劉.*"
, strvar)
print
(lst)
# ['劉能和劉老根和劉鐵棍子777子888']
lst = re.findall(
"劉."
, strvar)
print
(lst)
# ['劉能和劉老根和劉鐵棍子777子888']
lst = re.findall(
"劉.*子"
, strvar)
print
(lst)
# ['劉能和劉老根和劉鐵棍子777子']
# 非貪婪模式
lst = re.findall(
"劉.??"
, strvar)
print
(lst)
# ['劉', '劉', '劉']
lst = re.findall(
"劉.+?"
, strvar)
print
(lst)
# ['劉能', '劉老', '劉鐵']
lst = re.findall(
"劉.*?"
, strvar)
print
(lst)
# ['劉', '劉', '劉']
lst = re.findall(
"劉.?"
, strvar)
print
(lst)
# ['劉能', '劉老', '劉鐵']
lst = re.findall(
"劉.*?子"
, strvar)
print
(lst)
# ['劉能和劉老根和劉鐵棍子']
3.邊界符 \b ^ $
\b backspace 本身就是乙個轉義字元
邊界符 卡單詞 word
卡住左邊界 \bw
卡住右邊界 d\b
strvar =
"word pwd scf"
lst = re.findall(r".*d\b"
, strvar)
print
(lst)
# ['word pwd']
lst = re.findall(r".*?d\b"
, strvar)
print
(lst)
# ['word', ' pwd']
lst = re.findall(r"\bw.*"
, strvar)
print
(lst)
# ['w']
lst = re.findall(r"\bw.*?"
, strvar)
print
(lst)
# ['w']
# 正規表示式中寫字元時,要謹慎,下面例子必須匹配到第乙個空格時,才結束
lst = re.findall(r"\bw.*? "
, strvar)
print
(lst)
# ['word ']
lst = re.findall(r"\bw\s*"
, strvar)
print
(lst)
# ['word']
4.邊界符 \b ^ $
^ 必須以…開頭
$ 必須以…結尾
如果出現了^ $ , 要把這個字串看成乙個整體
strvar =
"大哥大嫂大爺"
print
(re.findall(
'大.'
, strvar)
)# ['大哥', '大嫂', '大爺']
print
(re.findall(
'^大.'
, strvar)
)# ['大哥']
print
(re.findall(
'大.$'
, strvar)
)# ['大爺']
print
(re.findall(
'^大.$'
, strvar))#
print
(re.findall(
'^大.*?$'
, strvar)
)# ['大哥大嫂大爺']
print
(re.findall(
'^大.*?大$'
, strvar))#
print
(re.findall(
'^大.*?爺$'
, strvar)
)# ['大哥大嫂大爺']
print
(re.findall(
'^g.*? '
,'giveme 1gfive gay'))
# ['giveme ']
print
(re.findall(
'five$'
,'aassfive'))
# five
print
(re.findall(
'^giveme$'
,'giveme'))
# giveme
print
(re.findall(
'^giveme$'
,'giveme giveme'))
# print
(re.findall(
'giveme'
,'giveme giveme'))
# ['giveme', 'giveme']
print
(re.findall(
"^g.*e"
,'giveme 1gfive gay'))
# ['giveme 1gfive']
正規表示式 多字元匹配
正規表示式 多字元匹配 匹配的規則 字元 功能 匹配前乙個字元出現0次或者無限次,即可有可無 匹配前乙個字元出現1次或者無限次,即至少有1次 匹配前乙個字元出現1次或者0次,即要麼有1次,要麼沒有 匹配前乙個字元出現m次 d 123 匹配前乙個字元出現從m到n次 d 1234 12345 12345...
正規表示式 多字元匹配
import re 匹配單個字元 匹配0個或者多個字元 text abc rem re.match w text print rem.group 匹配1個或者多個字元 text abc rem re.match w text print rem.group 匹配前乙個字元0個或者1個 text ab...
正規表示式匹配多字元 二
都是用來表示限定位數 在裡面限定 表示至少有0個 表示至少有1個 表示匹配至少0個除了 n換行符以外的符號 表示匹配至少1個除 n換行符以外的符號 a za z 表示至少有1個大小寫字母 import re result re.match r a za z python3 print result ...