正則表示式和re模組
阿新 • • 發佈:2018-12-28
1. 正則表示式 匹配字串
元字元
. 除了換行
\w 數字, 字母, 下劃線
\d 數字
[] 字元組
^ 字串的開始
$ 字串的結束
| 或者
[^xxx] 非xxxx
\s 空白符
\n 換行
\t 製表符
\b 單詞的邊界
\W 非數字, 字母, 下劃線
\D 非數字
\S 非空白符
量詞
* 0->n
+ 1->n
? 0->1
{p} p次
{p,q} p->q次
{p,} 至少p次
貪婪
.*
.+
惰性:
.*? 儘可能少的匹配
轉義 \\\\n => \\n => \n
正則前面加r
分組 ()
2. 在python中使用正則. re模組
在python中獲得的正則取一個名字 (?P<name>正則)
1. search() 搜尋. 搜尋到第一個結果返回
2. match() 匹配. 收到一個結果返回. 從頭開始匹配
3. findall() 查詢所有匹配結果
4. finditer() 返回迭代器.
5. compile() 編譯
import re a = re.compile(r"\d+") # 編譯了一段正則. 載入了一段正則 lis = a.findall("盧本偉就是55開,再來10個馬飛,跟開哥也還是55開") print(lis)
6. group("name") 獲取資料
7. re.S 忽略掉 . *? 的換行
import re a = re.findall("\d","盧本偉是56開") print(a) b = re.finditer("\d","盧本偉是56開") for i in b : print(i.group()) c = re.search("\d","盧本偉是56開") print(c.group()) d = re.match("\d","56開是盧本偉") print(d.group()) kai = re.finditer(r"盧本偉是(?P<aname>.*?),他有一個小弟叫(?P<bname>.*?),","盧本偉是55開,他有一個小弟叫馬飛飛,他們關係很好的",re.S) for i in kai : print(i.group("aname"),i.group("bname"))