python 正規表示式

2022-09-23 06:07:13 字數 3719 閱讀 5354

r'[\u4e00-\u9fa5]漢字

.匹配除換行符外的任意字元

\d匹配所有數字 ,與[0-9]相同[0123456789]

\d匹配非數字字元,[^0-9]

\w匹配數字,字母,下劃線[0-9a-za-z_]

\w匹配非數字 字線 下劃線[^0-9a-za-z]

\s匹配任意空白符(空格  換行 換頁符 製表符 回車,同[  \f\n\r\t]

\s匹配任意非空白符(空格  換行 換頁符 製表符 回車,同[^  \f\n\r\t]

^行首匹配

$行尾匹配

\a 匹配字串開始,只匹配整個字串的開頭.與^區別:即使與re.m配合也只能匹配當前行行首,不會匹配其他行的行首

\z匹配字串結束,只匹配整個字串的結束.與$區別:即使與re.m配合也只能匹配當前行行尾,不會匹配其他行的行尾

>>> print(re.search(r"\ai","i'm a never"))

>>> print(re.search(r"i\z","i'm a never"))

none

>>> print(re.search(r"r\z","i'm a never"))

>>>

\b匹配一個單詞的邊界,就是單詞和空格間的位置

\b匹配非單詞的邊界

>>> print(re.search(r'er\b',"never"))

>>> print(re.search(r'er\b',"never"))

none

>>>

(abc)匹配abc這三個字元組合串

(abc)?匹配0個或1個abc

(abc)*匹配0個或任意多個abc

.*匹配0個或任意個字元(換行符除外)

(abc)+匹配至少一個abc

(abc)匹配2或3或4或5個abc

import re

aa="this di df er dman man"

print(re.split(r" +",aa))上

上面的**是用正則分割字元

結果:********************= restart: d:/python/python37/re2.py ********************=

['this', 'di', 'df', 'er', 'dman', 'man']

>>>

import re

aa=r'[0-9a-za-z_]'#匹配任意一個數字字母或下劃線

print(re.search(aa,"dsfs345355"))

rr="i an dfef fgdei fdfeffd"

rra=re.finditer(r'fe',rr) #與findall類似,查詢整個字串,但不將結果一次性放到記憶體中,而返回一個迭代器

for i in rra: #用迴圈返回結果

print(i.group())

print(".........")

rra=re.finditer(r'df',rr)

while true: #利用迴圈與next結合返回結果

try:

ia=next(rra) #迭代器用next返回

print(ia.group())

except stopiteration as e:

break上

上面的**是finditer:查詢到的每個結果,用其group()返回其具體結果值

findall 返回一個包含所有匹配到的字元的列表,列表類以元組的形式存在。

finditer 返回一個可迭代物件。

結果:********************= restart: d:\python\python37\re1.py ********************=

fefe

.........

dfdf

>>>

import re

aa=r'[0-9a-za-z_]'#匹配任意一個數字字母或下劃線

print(re.search(aa,"dsfs345355"))

rr="i an dfef fgdei fdfeffd"

#sub subn:在目標字串中以正規表示式的規則匹配字串,再把其替換成指定的字串,可以指定替換次數。如果不指定預設替換所有符合目標物件

#sub直接返回替換後的結果;subn:返回元組:替換後的結果,替換的次數

rrb=re.sub(r'df',"gg",rr)

rrbb=re.subn(r'df',"gg",rr)

print(rrb)

print(rrbb)

print("..............")

strb="sunck is a go0534-3456776od man!sunck is 020-45343422a nice man! sunk is good man 010-53247654"

stra="010-33434344"

m=re.match(r"(\d)-(\d)",stra) #match從最左邊匹配

print(m)

print(m.group(0))

print(m.group(1))

print(m.group(2))

print(">>>>>>>>>>>>")

ma=re.findall(r"(\d-\d)",strb)

mab=re.findall(r"(\d-\d)",strb)

maa=re.findall(r"((\d-\d)|(\d-\d))",strb)

print(ma)

print(maa)

print(mab)

結果:********************= restart: d:\python\python37\re1.py ********************=

i an ggef fgdei fggeffd

('i an ggef fgdei fggeffd', 2)

..............

010-33434344

01033434344

>>>>>>>>>>>>

['020-45343422', '010-53247654']

[('0534-3456776', '', '0534-3456776'), ('020-45343422', '020-45343422', ''), ('010-53247654', '010-53247654', '')]

['0534-3456776']

>>>

dd='''

sdxxhello

xxfsdfxxworldxxasdf

'''d=re.findall('

xx(.*?)xx

',dd)

print

(d)d=re.findall('

xx(.*?)xx

',dd,re.s) #

re.s表示跨行匹配,沒有則不跨行

print(d)

結果:['fsdf']

['hello\n', 'world']

>>>

re.match(r'.',"abvd")  #匹配最左邊開始的字元

re.search(r'.',"abdd") #匹配整個字串中第一個符合條件的字元

re.findall(r'.',"abcd") #匹配整個字串中所有符合條件的字元