1. 程式人生 > >python - re正則匹配模塊

python - re正則匹配模塊

電話 wide clas tdi 數字 cat gpo 掃描 等價

re模塊

re 模塊使 Python 語言擁有全部的正則表達式功能。

compile 函數根據一個模式字符串和可選的標誌參數生成一個正則表達式對象。該對象擁有一系列方法用於正則表達式匹配和替換。

re 模塊也提供了與這些方法功能完全一致的函數,這些函數使用一個模式字符串做為它們的第一個參數。

re.match函數

re.match 嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。

# (匹配規則,字符串,特殊標誌)
re.match(pattern, string, flags=0)

re.search方法

re.search 掃描整個字符串並返回第一個成功的匹配。

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

re.match與re.search的區別

re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字符串,直到找到一個匹配。

#!/usr/bin/python
import re
 
line = "Cats are smarter than dogs";
 
matchObj = re.match( rdogs, line, re.M|re.I)
if matchObj:
   print "match --> matchObj.group() : 
", matchObj.group() else: print "No match!!" matchObj = re.search( rdogs, line, re.M|re.I) if matchObj: print "search --> matchObj.group() : ", matchObj.group() else: print "No match!!"
No match!!
search --> matchObj.group() :  dogs

檢索和替換

Python 的 re 模塊提供了re.sub用於替換字符串中的匹配項。

#
pattern 正則中的模式字符串。 # repl 替換的字符串,也可為一個函數。 # string 要被查找替換的原始字符串。 # count 模式匹配後替換的最大次數,默認 0 表示替換所有的匹配。 re.sub(pattern, repl, string, count=0, flags=0)
#### 實例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import re
 
phone = "2004-959-559 # 這是一個國外電話號碼"
 
# 刪除字符串中的 Python註釋 
num = re.sub(r#.*$, "", phone)
print "電話號碼是: ", num
 
# 刪除非數字(-)的字符串 
num = re.sub(r\D, "", phone)
print "電話號碼是 : ", num
電話號碼是:  2004-959-559 
電話號碼是 :  2004959559

re.compile 函數

compile 函數用於編譯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數使用。

#### parttern re.compile(pattern[, flags])
#### flags 
# re.I 忽略大小寫
# re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴於當前環境
# re.M 多行模式
# re.S 即為 . 並且包括換行符在內的任意字符(. 不包括換行符)
# re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴於 Unicode 字符屬性數據庫
# re.X 為了增加可讀性,忽略空格和 # 後面的註釋
re.compile(pattern[, flags])
>>>import re
>>> pattern = re.compile(r([a-z]+) ([a-z]+), re.I)   # re.I 表示忽略大小寫
>>> m = pattern.match(Hello World Wide Web)
>>> print m                               # 匹配成功,返回一個 Match 對象
<_sre.SRE_Match object at 0x10bea83e8>
>>> m.group(0)                            # 返回匹配成功的整個子串
Hello World
>>> m.span(0)                             # 返回匹配成功的整個子串的索引
(0, 11)
>>> m.group(1)                            # 返回第一個分組匹配成功的子串
Hello
>>> m.span(1)                             # 返回第一個分組匹配成功的子串的索引
(0, 5)
>>> m.group(2)                            # 返回第二個分組匹配成功的子串
World
>>> m.span(2)                             # 返回第二個分組匹配成功的子串
(6, 11)
>>> m.groups()                            # 等價於 (m.group(1), m.group(2), ...)
(Hello, World)
>>> m.group(3)                            # 不存在第三個分組
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: no such group

python - re正則匹配模塊