python re正则表达式模块

模块的的作用主要是用于字符串和文本处理,查找,搜索,替换等

复习一下基本的正则表达式吧

 .:匹配除了换行符以为的任意单个字符


 *:匹配任意字符,一个,零个,多个都能匹配得到 俗称贪婪模式


+:匹配位于+之前的一个或者多个字符


 |:匹配位于|之前或者之后的字符


 ^:匹配行首


 $:匹配行尾


 ?:匹配位于?之前的零个或者一个字符,不匹配多个字符


 \:表示 \ 之后的为转义字符


 []:匹配[]之中的任意单个字符,[0-9]表示匹配0到9任意一个数字


 ():将位于()之内的的内容当作一个整体


 {}:按{}中的次数进行匹配,100[0-9]{3}表示在100之后任意匹配一个3位数(100-999)


 

 python中以\开头的元字符:

 
转义字符 含义
\b 匹配单词头或者单词尾
\B 和\b含义相反
\d 匹配任何数字
\D 和\d含义相反,匹配任何非数字
\s 匹配任何空白字符
\S 和\s含义相反,匹配任何非空白字符
\w 匹配任何字母,数字,下划线
\W 匹配任何非字母,数字,下划线

 

 

 

 

 

 

 

 

 

 

 

 

匹配的标志和含义

标志 含义
re.I 忽略大小写
re.L 根据本地设置而更改\w,\W,\b,\B,\s,\S的匹配内容
re.M 
多行匹配模式
re.S 使“.”元字符匹配换行符
re.U 匹配Unicode字符
re.X 忽略需要匹配模式中的空格,并且可以使用"#"号注释

 

 

 

 

 

 

 

 

 

文本内容(提取linux下的passwd文件)

1 man:x:6:12:man:/var/cache/man:/bin/nologin
View Code

 

re模块中有3个搜索函数,每个函数都接受3个参数(匹配模式,要匹配的字符串,进行匹配的标志),如果匹配到了就返回一个对象实例,么有就返会None.

findall():用于在字符串中查找符合正则表达式的字符串,并返回这些字符串的列表

search():搜索整个字符串,返回对象实例

match():只从第一个字符开始匹配,后面的不再匹配,返回对象实例

 1 lovelinux@LoveLinux:~/py/boke$ cat text 
 2 man:x:6:12:man:/var/cache/man:/bin/sh
 3 lovelinux@LoveLinux:~/py/boke$ cat test.py
 4 #/usr/bin/env python
 5 #coding:utf-8
 6 import re
 7 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.py 
12 None
13 34
14 lovelinux@LoveLinux:~/py/boke$ vim test.py
15 lovelinux@LoveLinux:~/py/boke$ python test.py 
16 None
17 <_sre.SRE_Match object at 0x7f12fc9f9ed0>
View Code

 

 search()返回是对象实例有2个方法,

start():返回记录匹配到字符的开始索引 

end():返回记录匹配到字符的结束索引

 1 lovelinux@LoveLinux:~/py/boke$ python test.py 
 2 None
 3 31
 4 34
 5 lovelinux@LoveLinux:~/py/boke$ cat test.py 
 6 #/usr/bin/env python
 7 #coding:utf-8
 8 import re
 9 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():用于找找匹配的字符,把匹配到的字符作为数组返回

1 #!/usr/bin/env python 
2 #coding:utf-8
3 import re
4 a = " man x 6 12 man / var /cache/man /bin/nologin"
5 print re.findall('[a-z]{3}\s', a)
6 
7 输出结果:
8 ['man ', 'man ', 'var ', 'man ']
View Code

sub():用于替换,接受四个参数,sub(匹配模式,要替换成的内容,进行替换的字符串,最大的替换次数)最后一个为可选参数.返回替换后的字符串

把只有3个字母组成的单词替换成heihei,只替换前3个

1 #!/usr/bin/env python 
2 #coding:utf-8
3 import re
4 a = " man x 6 12 man / var /cache/man /bin/nologin"
5 print re.sub('[a-z]{3}\s', 'heihei',a,3)
6 
7 输出结果:
8 heiheix 6 12 heihei/ heihei/cache/man /bin/nologin
View Code

split():用于分割字符串,接受3个参数re.split(匹配模式,要分割的字符串,最大的分割次数),最后一个为可选参数,返回分割后的字符串列表

1 #!/usr/bin/env python 
2 #coding:utf-8
3 import re
4 a = " man x 6 12 man / var /cache/man /bin/nologin"
5 print re.split('a', a)
6 
7 输出结果:
8 [' m', 'n x 6 12 m', 'n / v', 'r /c', 'che/m', 'n /bin/nologin']
View Code

编译正则表达式
compile():编译正则表达式,返回一个正则对象实例,然后通过返回的对象实例对字符串进行查找替换,接受2个参数compile(正则表达式,匹配标志)
例子搜索web日志里面的IP

1 #!/usr/bin/env python 
2 #coding:utf-8
3 import re
4 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 print r.findall(logstr)
7 
8 输出结果:
9 ['192.168.1.56']
View Code
posted @ 2014-07-16 01:54  ppingg  阅读(439)  评论(0编辑  收藏  举报