Python Regular Expression 正則表示式

個人常用的正則表示式

import re

確認進來的字串是否為 數+字母+數+字母+數+字母+數+字母+數+字母+數+字母
a = "1f2g3h4j5k6k"     b="11g4j5k6k5k5j"

match會從字串開頭比對,所以

re.match("[0-9][a-z][0-9][a-z][0-9][a-z][0-9][a-z][0-9][a-z][0-9][a-z]", a) -> 返回物件
re.match("[0-9][a-z][0-9][a-z][0-9][a-z][0-9][a-z][0-9][a-z][0-9][a-z]", b) -> None

serach字串中有符合即可找到

re.match("[0-9][a-z][0-9][a-z][0-9][a-z][0-9][a-z][0-9][a-z][0-9][a-z]", a) -> 返回物件
re.match("[0-9][a-z][0-9][a-z][0-9][a-z][0-9][a-z][0-9][a-z][0-9][a-z]", b) -> 返回物件



去除空白鍵
a = "a  b       c d     e      f"

re.sub("\s+", "", a)  -> "abcdef"   (將空白分隔用空字元取代)

分割字串
a = "kk(L)bb"   , b="a b    cd      e f", c="abc11abc1111abc1111111abc"

re.split("\s+", a) =>[kk(L)bb]
re.split("\s+", b) ->[a, b, cd, e, f]
re.split("\(.+\)", a) -> [kk, bb]
re.split("1{3,5}", c)   -> ['abc11abc', 'abc', '11abc']  (大括號指3個到5個"1")
re.sub("1{3,5}", "2", c) -> 'abc11abc2abc211abc'

小記憶

\d 就是[0-9]
\D就是[^0-9]

re.sub("\d", "?", c) -> 'abc??abc????abc???????abc'
re.sub("\D", "?", c) -> '???11???1111???1111111???'
re.findall("\d+", c) -> ['11', '1111', '1111111']


\s 是任何空白鍵
\S 非任何空白鍵

 .  是任意字元
? 是前方字元出現零次或一次。如sa?, 會找出s, sa。
* 是前方字元出現零次或更多次。如sa*,會找出s, sa, saa, saaa..
+ 是前方字元出現一次或更多次。如sa+,會找出sa, saa, saaaa...

(?=...)
a = 'is good is bad, is android'
k= re.search("is\s+(?=bad)", a) -> print k.group() 會得到 is ,這個is就是指bad前的那個is。這樣我們可以理解,(?=...)指的是後面跟著… 的東西。以我們這個例子就是後面跟著bad的is。

試試取代看看
re.sub("is\s+(?=bad)", "new", a) ->  'is good newbad, is android'

(?!...)
這樣我們可以理解,(?!...)後面不跟著bad的is。
re.sub("is\s+(?!bad)", "new", a) ->  'newgood is bad, newandroid'


留言

這個網誌中的熱門文章

python 找圖自動點擊

VBA EXCEL 工作表變化 馬上執行 的作法 Worksheet_Change

Python pyserial 抓取系統內的 COM PORT