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)
正则在网页及信息处理中很有用。
行万里路,不忘初心!