正規表示式 多字元匹配

2021-10-23 11:37:34 字數 4380 閱讀 3530

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 ...