1. 程式人生 > >Python中使用正則表示式

Python中使用正則表示式

1. 正則基礎

     1)正則表示式的原理:正則表示式引擎對正則表示式文字進行編譯生成正則表示式物件;                                                                                                   正則表示式物件對需要匹配的檔案匹配後返回匹配結果。      2) 正則表示式原字元:

. 匹配任何除換行的字元(需要匹配'.'時,使用"\.")
^ 匹配字串開頭
[^a-z] 取反:除了a-z的字元
$ 匹配字串結尾
* 匹配前一個字元0次或多次
+ 匹配前一個字元1次或多次
? 匹配一個字元0次或1次,防止貪婪匹配
{n} 匹配前一個字元n次
{m,n} 匹配前一個字元m~n次
[] 匹配當中的任意一個
() 分組:(abc)* 控制的是整個組物件
|
r 原生字元
\d 匹配任何十進位制
\D 匹配任何非數
\s 匹配空白字元 = [\t\n\r\f\v]
\S 匹配任何非空白字元
\w 匹配下劃線在內的任何字母,數字字元
\W 匹配任何非下劃線,數字,字母字元的符號
\number 引用編號為number的分組匹配到的字串
<?P=name> 應用別名為name的分組匹配到的字元

2. Python re模組

     import re      a = re.findall("正則表示式","要匹配的字串",flags=標誌1|標誌2|...)  以列表形式返回匹配到的字串          1)常用flag標誌:          re.S(DOTALL)  使.匹配包括換行在內的所有字元          re.I(IGNORECASE) 使匹配對大小寫不敏感          re.M(MULTILINE) 多行匹配影響^和$          re.U 根據Unicode字符集解析字元,這個標誌影響\w,\W,\b,\B      2)re模組中常用功能函式:

         ①match(pattern,string,flags=0)  匹配字串開頭,成功返回match object物件,未成功返回None

import re
origin = "hello egon bcd dag"
r = re.match("(h\w+)\s+(\w+)", origin)

# group()返回正則表示式整體匹配到的結果:'hello egon'
print r.group()
# groups()返回匹配到的分組結果:('hello', 'egon')
print r.groups()
# groupdict()返回字串分組部分定義了key組的結果: {}
print r.groupdict()

# {'key_name1': 'h', 'key_name2': 'ello'}    
r = re.match("(?P<key_name1>h)(?P<key_name2>\w+)", origin) 

        ②search(pattern, string, flags=0)  #匹配第一個符合規則的字串,未成功返回None         ③findall(pattern, string, flags=0)   #匹配所有符合規則的,沒有返回空列表。                   如果pattern裡有1個分組,只將組中的字串放在列表中返回,相當於groups()                   如果有多個分組,就把組的部分放到一個元組中,再把多個元組放到一個列表中   [('a','lex'),('a','bc')]         ④split(pattern, string, maxsplit=0, flags=0)       #根據正則匹配分割字串,返回一個列表         ⑤sub(pattern, repl, string, count=0, flags=0)    #替換匹配成功的指定位置的字串         ⑥subn(pattern, repl, string, count=0, flags=0)  #替換後並返回替換次數  a,b = re.subn('a', 'tihuan', 'abcde')