正則 多個字元匹配

2022-06-30 10:39:07 字數 2910 閱讀 4261

# ### 正規表示式

# ###(二) 匹配多個字元 => [元字元] 量詞符號

import re

'''1) ? 匹配0個或者1個a '''

print(re.findall('a?b','abbzab abb aab'))

'''2) + 匹配1個或者多個a '''

print(re.findall('a+b','b ab aaaaaab abb'))

'''3) * 匹配0個或者多個a '''

print(re.findall('a*b','b ab aaaaaab abbbbbbb'))

'''4) 匹配m個至n個a '''

print(re.findall('ab','aaab ab aab abbb aaz aabb aaaaaaaaaabb'))

print(re.findall('ab','aaab ab aab abbb aaz aabb aaaaaaaaaabb'))

print(re.findall('ab','aaab ab aab abbb aaz aabb aaaaaaaaaabb'))

# 貪婪匹配 與 非貪婪匹配 [語法:量詞的後面加?號]

"""貪婪匹配: 預設向更多次數匹配 底層用的是回溯演算法;

非貪婪匹配: 預設向更少次數匹配:

如果遇到了子這個字,在非貪婪模式下,匹配到第乙個就返回.

回溯演算法:

從左向右進行匹配,一直向後找,直到再也找不到了,回頭,拿離右側最近的那個值

"""strvar = "劉能和劉鐵鎚和劉大棍子12313子"

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)

lst = re.findall("劉.子",strvar)

print(lst,"<==>")

# 非貪婪匹配

strvar = "劉能和劉鐵鎚和劉大棍子12313子"

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)

# ###(三) 匹配開頭結尾 => [元字元] 邊界符號

"""\b 用來匹配邊界 word 匹配d為右邊界 d\b 匹配w為左邊界\bw

\b 退格 backspace 是乙個轉義字元

一般寫正規表示式的時候,字串的前面加上乙個r,讓轉義字元失效,

"""# 貪婪匹配

lst = re.findall(r".*d\b","word pwd abc")

print(lst)

# 非貪婪匹配

lst = re.findall(r".*?d\b","word pwd abc")

print(lst)

# 優化版:捨掉空格

lst = re.findall(r"\s*?d\b","word pwd abc")

print(lst)

# 匹配單詞的左邊界

lst = re.findall(r"\bw.* ","word abc")

print(lst)

"""^ 必須以某個字元開頭,後面的字元無所謂

$ 必須以某個字元結尾,前面的字元無所謂

如果正則裡面包含了^或者$ 意味著要把字串看成乙個整體

"""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 '))

print(re.findall('five$' , 'aassfive'))

print(re.findall('five$' , 'aassfive00'))

print(re.findall('^giveme$' , 'giveme'))

print(re.findall('^giveme$' , 'givemeq'))

print(re.findall('^giv.me$' , 'giveme'))

print(re.findall('^giveme$' , 'giveme giveme'))

print(re.findall('giveme' , 'giveme giveme'))

print(re.findall("^g.*e",'giveme 1gfive gay'))

正則匹配多個字元

匹配多個字元的相關格式 字元功能 匹配前乙個字元出現0次或者無限次,即可有可無 匹配前乙個字元出現1次或者無限次,即至少有1次 匹配前乙個字元出現1次或者0次,即要麼有1次,要麼沒有 匹配前乙個字元出現m次 匹配前乙個字元出現從m到n次 需求 匹配出,乙個字串第乙個字母為大小字元,後面都是小寫字母並...

匹配多個字元

匹配多個字元的相關格式 字元功能 匹配前乙個字元出現0次或者無限次,即可有可無 匹配前乙個字元出現1次或者無限次,即至少有1次 匹配前乙個字元出現1次或者0次,即要麼有1次,要麼沒有 匹配前乙個字元出現m次 匹配前乙個字元出現從m到n次 需求 匹配出,乙個字串第乙個字母為大小字元,後面都是小寫字母並...

正規表示式 匹配多個字元

功能 匹配前乙個字元出現0次或者無限次,即可有可無 匹配前乙個字元出現1次或者無限次,即至少有1次 匹配前乙個字元出現1次或者0次,即要麼有1次,要麼沒有 匹配前乙個字元出現m次 匹配前乙個字元出現從m到n次 需求 匹配出乙個字串第乙個字母為大小字元,後面都是小寫字母並且這些小寫字母可 有可無 im...