Python之正規表示式

2021-07-25 20:48:41 字數 3315 閱讀 8451

正規表示式元字元如下:. ^ $ * + ? [ ] \ | ( )

. 匹配除換行符以外的所以字元

^ 規定匹配模式必須出現在目標字串的開頭,例如:^hell    hello    hellboy

$ 規定匹配模式必須出現在目標字串的結尾,例如:ar$   car   bar

* 其前乙個字元必須在目標物件中連續出現零次或多次

+ 其前乙個字元必須在目標物件中連續出現一次或多次

? 其前乙個字元必須在目標物件中連續出現一次或零次

匹配確定的n次,例如:o oo

至少匹配n次,例如:o oo ooo oooo

至少匹配n次,至多匹配m次,例如:o oo ooo

[a-z] a-z內任意乙個大寫字母

[a-z] a-z內任意乙個小寫字母

[0-9] 0-9內任意乙個數字,等價於 \d

[a-za-z0-9] 任意乙個字母或數字,等價於 \w

\ 轉義字元,例如[ ==> [ , \==>\

| 管道符號,a和b是任意的re,那麼a|b就是匹配a或者b的乙個新的re。

\s 用於匹配單個空格,包括tab鍵和換行符

\s 用於匹配單個空格之外的所有字元

\d 匹配0-9的數字

\w 匹配字母、數字或下劃線

\w 匹配所有和\w不匹配的字元

使用正規表示式

re.compile(pattern, flags=0)

編譯正規表示式,返回乙個 pattern 物件。

>>>prog = re.compile(pattern)

>>>result = prog.match(string)

等價於

>>>result = re.match(pattern, string)
第一種方式能實現正規表示式的重用。

re.match(pattern, string, flags=0)

如果字串的開頭能匹配正規表示式,返回對應的 match 物件,否則返回none。

re.search(pattern, string, flags=0)

在字串中查詢,是否能匹配正規表示式,若是,返回對應的 match 物件,否則返回none。

re.split(pattern, string, maxsplit=0, flags=0)

使用正規表示式分離字串。如果用括號將正規表示式括起來,那麼匹配的字串也會被列入到list中返回。maxsplit是分離的次數,maxsplit=1分離一次,預設為0,不限制次數。

>>> p = re.compile(r'\w+')

>>> p2 = re.compile(r'(\w+)')

>>> p.split('this... is a test.')

['this', 'is', 'a', 'test', '']

>>> p2.split('this... is a test.')

['this', '... ', 'is', ' ', 'a', ' ', 'test', '.', '']

re.findall(pattern, string, flags=0)

找到 re 匹配的所有子串,並把它們作為乙個列表返回。如果無匹配,返回空列表。

>>> p = re.compile('\d+')

>>> p.findall('12 drummers drumming, 11 pipers piping, 10 lords a-leaping')

['12', '11', '10']

re.finditer(pattern, string, flags=0)

找到 re 匹配的所有子串,並把它們作為乙個迭代器返回。

>>> p = re.compile('\d+')

>>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...')

>>> iterator

>>> for match in iterator:

... print(match.span())

...(0, 2)

(22, 24)

(29, 31)

re.sub(pattern, repl, string, count=0, flags=0)

找到 re 匹配的所有子串,並將其用乙個不同的字串替換。可選引數 count 是模式匹配後替換的最大次數;count 必須是非負整數。預設值是 0 表示替換所有的匹配。如果無匹配,字串將會無改變地返回。

group([group1, …])

>>> m = re.match(r"(\w+) (\w+)", "isaac newton, physicist")

>>> m.group(0) # 整個匹配

'isaac newton'

>>> m.group(1) # 第乙個子串

'isaac'

>>> m.group(2) # 第二個子串

'newton'

>>> m.group(1, 2) # 多個子串組成的元組

('isaac', 'newton')

如果有其中有用(?p…)這種語法命名過的子串的話,相應的groupn也可以是名字字串。例如:

>>> m = re.match(r"(?p\w+) (?p\w+)", "malcolm reynolds")

>>> m.group('first_name')

'malcolm'

>>> m.group('last_name')

'reynolds'

groups(default=none)

返回乙個由所有匹配到的子串組成的元組。

>>> m = re.match(r"(\d+)\.(\d+)", "24.1632")

>>> m.groups()

('24', '1632')

default的作用:

>>> m = re.match(r"(\d+)\.?(\d+)?", "24")

>>> m.groups() # 第二個預設是none

('24', none)

>>> m.groups('0') # 現在預設是0了

('24', '0')

Python之正規表示式

正規表示式正規表示式主要用來匹配字串,例如 判斷乙個字串是否是乙個合法的 思想是用描述性的語言給字串乙個規則。re模組中的match函式提供了這種功能,若匹配成功則返回匹配物件,否則返回none。一 語法 d 表示匹配數字 w 表示匹配字母或數字 可以匹配任意字元 s可以匹配乙個空格或者tab 特殊...

Python之正規表示式

匯入re模組 檢索和替換 re.sub re.sub pattern,repl,string,count 0,flags 0 pattern 正則中的模式字串 repl 替換的字串,也可為乙個函式 string 要被查詢替換的原始字串 count 模式匹配後替換的最大次數,預設 0 表示替換所有的匹...

Python之正規表示式

python之正規表示式 1.正規表示式的大致匹配過程是 依次拿出表示式和文字中的字元比較,如果每乙個字元都能匹配,則匹配成功 一旦有匹配不成功的字元則匹配失敗,具體如下圖 1.1 貪婪模式與非貪婪模式 正規表示式通常用於在文字中查詢匹配的字串。python裡數量詞預設是貪婪的 在少數語言裡也可能是...