1,全文方式匹配。比如要在“how are you @!”中要匹配“you @!“,可以建立如下正则表达式:

key  = r'how are you @!'
p1 = 'you @!'
p2 = re.compile(p1)
print p2.findall(key)

 2,表达式匹配。

表达式匹配涉及到很多的符号。

正则表达式 代表的意思
[0-9] 0123456789之一
[a-z] 小写字母之一
[A-Z] 大写字母之一
\d 同[0-9]
\D 同[^0-9] 匹配非数字
\w 匹配大小写字母、数字、下划线
\W 同[^a-zA-Z0-9_]
. 任意字符
^ 以xx开头 例:‘^xyz@163.com’
$ 以xx结尾 例:‘.com$’
{m,n} 匹配前一个至少m次,之多n次
+ 至少匹配前一个1次
* 至少匹配前一个0次
+?、*? 惰性匹配

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3,例子

*号用法:

key = r'http://i love u and https://i love u too'
p1 = 'https*://'
p2 = re.compile(p1)
print p2.findall(key)
>>['http://', 'https://']

 [^]匹配非xx的用法:假如有个字符串是这样的“put but kut”,想从其中匹配出put与but,相当于匹配出非kut的字串

key = r'put but kut'
p1 = '[^k]ut'
p2 = re.compile(p1)
print p2.findall(key)

 比如邮箱中的匹配:在“iajkajauwangyue@edu.com.cn”中匹配出“@edu.”

key =  r'iajkajauwangyue@edu.com.cn'
p1 = r'@.+?\.'

p2 = re.compile(p1)

match1 = re.search(p2, key)

print match1.group(0)

 匹配次数的用法:在“boy booy boooy”中匹配出“boy booy”

key = 'boy booy boooy'

p1 = r'bo{1,2}y'

p2 = re.compile(p1)

print p2.findall(key)

 4,向前向后匹配

?<=表示前置条件,?=表示后置条件,如在“<body><h1>wangyue</h1></body>”中匹配“wangyue”:

key = r'<body><h1>wangyue</h1></body>'

p1 = r'(?<=<h1>).+(?=</h1>)'

p2 = re.compile(p1)

print p2.findall(key)

 5,回溯引用

可能对一个表达式要反复引用,此时用回溯最方便。比如,在html中可能存在很多的标题,从h1到h5都算标题,此时将匹配条件写成h[1-5]最好用。

在“<body><h1>wangyue</h3></body>”中匹配“<h1>wangyue</h3>”

key = '<body><h1>wangyue</h3></body>'
p1 = r'<h[1-5]>.+?</h[1-5]>'
p2 = re.compile(p1)
print p2.findall(key)

 

正则在网页及信息处理中很有用。

 

posted on 2017-10-23 13:34  望月又一  阅读(222)  评论(0编辑  收藏  举报