python re正则匹配_python re正则表达式模块
模塊的的作用主要是用于字符串和文本處理,查找,搜索,替換等
復(fù)習(xí)一下基本的正則表達(dá)式吧
.:匹配除了換行符以為的任意單個(gè)字符
*:匹配任意字符,一個(gè),零個(gè),多個(gè)都能匹配得到 俗稱貪婪模式
+:匹配位于+之前的一個(gè)或者多個(gè)字符
|:匹配位于|之前或者之后的字符
^:匹配行首
$:匹配行尾
?:匹配位于?之前的零個(gè)或者一個(gè)字符,不匹配多個(gè)字符
\:表示 \ 之后的為轉(zhuǎn)義字符
[]:匹配[]之中的任意單個(gè)字符,[0-9]表示匹配0到9任意一個(gè)數(shù)字
():將位于()之內(nèi)的的內(nèi)容當(dāng)作一個(gè)整體
{}:按{}中的次數(shù)進(jìn)行匹配,100[0-9]{3}表示在100之后任意匹配一個(gè)3位數(shù)(100-999)
python中以\開(kāi)頭的元字符:
轉(zhuǎn)義字符
含義
\b
匹配單詞頭或者單詞尾
\B
和\b含義相反
\d
匹配任何數(shù)字
\D
和\d含義相反,匹配任何非數(shù)字
\s
匹配任何空白字符
\S
和\s含義相反,匹配任何非空白字符
\w
匹配任何字母,數(shù)字,下劃線
\W
匹配任何非字母,數(shù)字,下劃線
匹配的標(biāo)志和含義
標(biāo)志
含義
re.I
忽略大小寫
re.L
根據(jù)本地設(shè)置而更改\w,\W,\b,\B,\s,\S的匹配內(nèi)容
re.M
多行匹配模式
re.S
使“.”元字符匹配換行符
re.U
匹配Unicode字符
re.X
忽略需要匹配模式中的空格,并且可以使用"#"號(hào)注釋
文本內(nèi)容(提取linux下的passwd文件)
1 man:x:6:12:man:/var/cache/man:/bin/nologin
View Code
re模塊中有3個(gè)搜索函數(shù),每個(gè)函數(shù)都接受3個(gè)參數(shù)(匹配模式,要匹配的字符串,進(jìn)行匹配的標(biāo)志),如果匹配到了就返回一個(gè)對(duì)象實(shí)例,么有就返會(huì)None.
findall():用于在字符串中查找符合正則表達(dá)式的字符串,并返回這些字符串的列表
search():搜索整個(gè)字符串,返回對(duì)象實(shí)例
match():只從第一個(gè)字符開(kāi)始匹配,后面的不再匹配,返回對(duì)象實(shí)例
1 lovelinux@LoveLinux:~/py/boke$ cat text2 man:x:6:12:man:/var/cache/man:/bin/sh3 lovelinux@LoveLinux:~/py/boke$ cat test.py4 #/usr/bin/env python
5 #coding:utf-8
6 importre7 with open('text','r') as txt:8 f =txt.read()9 print re.match('bin',f)10 print re.search('bin',f).end()11 lovelinux@LoveLinux:~/py/boke$ python test.py12 None13 34
14 lovelinux@LoveLinux:~/py/boke$ vim test.py15 lovelinux@LoveLinux:~/py/boke$ python test.py16 None17 <_sre.sre_match object at>
View Code
search()返回是對(duì)象實(shí)例有2個(gè)方法,
start():返回記錄匹配到字符的開(kāi)始索引
end():返回記錄匹配到字符的結(jié)束索引
1 lovelinux@LoveLinux:~/py/boke$ python test.py2 None3 31
4 34
5 lovelinux@LoveLinux:~/py/boke$ cat test.py6 #/usr/bin/env python
7 #coding:utf-8
8 importre9 with open('text','r') as txt:10 f =txt.read()11 print re.match('bin',f)12 print re.search('bin',f).start()13 print re.search('bin',f).end()
View Code
findall():用于找找匹配的字符,把匹配到的字符作為數(shù)組返回
1 #!/usr/bin/env python
2 #coding:utf-8
3 importre4 a = "man x 6 12 man / var /cache/man /bin/nologin"
5 print re.findall('[a-z]{3}\s', a)6
7 輸出結(jié)果:8 ['man', 'man', 'var', 'man']
View Code
sub():用于替換,接受四個(gè)參數(shù),sub(匹配模式,要替換成的內(nèi)容,進(jìn)行替換的字符串,最大的替換次數(shù))最后一個(gè)為可選參數(shù).返回替換后的字符串
把只有3個(gè)字母組成的單詞替換成heihei,只替換前3個(gè)
1 #!/usr/bin/env python
2 #coding:utf-8
3 importre4 a = "man x 6 12 man / var /cache/man /bin/nologin"
5 print re.sub('[a-z]{3}\s', 'heihei',a,3)6
7 輸出結(jié)果:8 heiheix 6 12 heihei/ heihei/cache/man /bin/nologin
View Code
split():用于分割字符串,接受3個(gè)參數(shù)re.split(匹配模式,要分割的字符串,最大的分割次數(shù)),最后一個(gè)為可選參數(shù),返回分割后的字符串列表
1 #!/usr/bin/env python
2 #coding:utf-8
3 importre4 a = "man x 6 12 man / var /cache/man /bin/nologin"
5 print re.split('a', a)6
7 輸出結(jié)果:8 ['m', 'n x 6 12 m', 'n / v', 'r /c', 'che/m', 'n /bin/nologin']
View Code
編譯正則表達(dá)式
compile():編譯正則表達(dá)式,返回一個(gè)正則對(duì)象實(shí)例,然后通過(guò)返回的對(duì)象實(shí)例對(duì)字符串進(jìn)行查找替換,接受2個(gè)參數(shù)compile(正則表達(dá)式,匹配標(biāo)志)
例子搜索web日志里面的IP
1 #!/usr/bin/env python
2 #coding:utf-8
3 importre4 logstr = '192.168.1.56 - - [14/Apr/2014:01:33:06 -0400] "GET /favicon.ico HTTP/1.1" 404 571 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"'
5 r = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')6 printr.findall(logstr)7
8 輸出結(jié)果:9 ['192.168.1.56']
View Code
總結(jié)
以上是生活随笔為你收集整理的python re正则匹配_python re正则表达式模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python中utf8占几个字节_为什么
- 下一篇: 用python画奥迪标志_不知道不 OK