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模組中常用功能函式:
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')