Python 正則高階運用

2021-09-30 09:59:38 字數 1767 閱讀 4441

常用函式

match()       決定 re 是否在字串剛開始的位置匹配

search()       掃瞄字串,找到這個 re 匹配的位置

findall()       找到 re 匹配的所有子串,並把它們作為乙個列表返回

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

修飾符:上面函式第三個引數

dotall, s     使 . 匹配包括換行在內的所有字元

ignorecase, i     使匹配對大小寫不敏感

locale, l     做本地化識別(locale-aware)匹配

multiline, m     多行匹配,影響 ^ 和 $

verbose, x     能夠使用 res 的 verbose 狀態,使之被組織得更清晰易懂  

(?p...)   匹配的命名組,讓匹配的東西能以鍵 name 的方式取得

(?p=name)        引用已匹配的命名組

(?=...)    正向匹配,例如 window (?=2000|xp|vista)

(?<=...)  返向匹配,例如 (?=2000|xp|vista) window, 與 (?=...) 剛好相反

(?!...)     正向不匹配

(?例子1:(?p...)

import re

m = re.search('(?p[a-z]+)(?p\d+)', 'ab12')

print repr(m.group())

print repr(m.group('word')), ',', repr(m.group(1))

print repr(m.group('num')), ',', repr(m.group(2))

輸出結果

'ab12'

'ab' , 'ab'

'12' , '12'

例子2:(?=...)  與 (?<=...)

import re

m = re.findall('(?<=1)(a|b|c)', 'a1b2c3')

print repr(m)

m = re.findall('(a|b|c)(?=1)', 'a1b2c3')

print repr(m)

輸出結果:

['b']

['a']

例子3:(?!...)  與 (?

import re

m = re.findall('(?輸出結果:

['a', 'c']

['b', 'c']

例子(組合):

import re

m = re.search('(?<=abc)end(?p[a-z]+)(?p\d+)start(?=hello)', 'abcendde12starthello')

print repr(m.group())

print repr(m.group('word')), ',', repr(m.group(1))

print repr(m.group('num')), ',', repr(m.group(2))

輸出結果:

'endde12start'

'de' , 'de'

'12' , '12'

python 裝飾器,高階與運用

小 tips 寫遞迴函式的章節提到過,當函式不斷呼叫自身,直到被pycharm發現丟擲異常。實際上是因為棧溢位。什麼是棧溢位呢?python中只要呼叫乙個函式,函式中自己呼叫自己,每次呼叫都會放到記憶體中反覆遞迴,但是當原函式沒結束時 就是說沒有設定遞迴結束標示 遞迴就不會結束,直到記憶體被用完,棧...

Python高階正則

1 importre2 3 p re.compile 0 9 45 m p.match 13435asadb 67print m.group 一 上面的第二行和第三行也可以合併成一行來寫 m p.match 0 9 13435asadb 效果是一樣的,區別在於第一種方式是提前對要匹配的格式進行編譯,...

Git運用高階

git建立本地分支 git checkout b x 或git branch x git checkout x git從倉庫轉殖 轉殖專案 git clone git ip 專案.git 轉殖專案並在本地建立開發分支 git clone git ip 專案.git b develop git更新本地...