Python网络爬虫之正则表达式

正则表达式非Python独有,在Python中通过re库模块实现。

下面是一些常见的匹配模式

re.match

re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

最常规的匹配

import re

content = "Hello 1234567 World_This is a Demo"

print(content)

result = re.match("^Hello\s\d\s\w.*Demo$",content)

print(result)

print(result.group()) #匹配结果

print(result.span()) #整个字符串全匹配

泛匹配

import re

content = "Hello 1234567 World_This is a Demo"

result = re.match("^Hello.*Demo$",content)

print(result)

print(result.group()) #匹配结果

print(result.span()) #整个字符串全匹配

匹配目标

import re

content = "Hello 1234567 World_This is a Demo"

result = re.match("^Hello\s(\d+)\sWorld.*Demo$",content)

print(result)

print(result.group(1)) #匹配第一个括号内的结果

print(result.span()) #整个字符串全匹配

贪婪匹配

import re

content = "Hello 1234567 World_This is a Demo"

result = re.match("^He.*(\d+).*Demo$",content)

print(result)

print(result.group(1)) #匹配结果只是最后的一个数字7

print(result.span()) #整个字符串全匹配

非贪婪匹配

import re

content = "Hello 1234567 World_This is a Demo"

result = re.match("^He.*?(\d+).*Demo$",content)

print(result)

print(result.group(1)) #匹配结果是1234567,关键在于'?'

print(result.span()) #整个字符串全匹配

匹配模式

import re

content = "Hello 1234567 World_This

is a Demo"

result = re.match("^He.*?(\d+).*Demo$",content,re.S)

print(result)

print(result.group(1)) #匹配结果是1234567

print(result.span()) #整个字符串全匹配

转义

import re

content = "prices is $5.00"

result = re.match("prices is \$5\.00",content)

print(result) #需要使用转义符

总结:尽量用使用泛匹配,使用括号的到匹配目标,尽量使用非贪婪模式,有换行符就用re.S

re.search

re.search扫描整个字符串并返回第一个成功的匹配(不需要开头和结尾的匹配)

search(正则规则,匹配串,有换行符就加上re.S)

import re

content = "Hello 1234567 World_This is a Demo"

result = re.search("^He.*?(\d+).*Demo$",content)

print(result.group(1)) #匹配结果是1234567

re.findall

搜索字符串,以列表形式返回所有能匹配的子串

search是查找一个,findall是查找所以的,下面来看一下具体的使用

search返回的是一个,而findall返回的是list

import re

html = '"

二珂《带着音..

Scream - Mic

薛之谦

周杰伦

李宗盛

成都

"'

result = re.search('

.*?href="(.*?)">(.*?)',html,re.S)

print(result)

if result:

print(result.group(1), result.group(2))

import re

html = '"

二珂《带着音..

Scream - Mic

薛之谦

周杰伦

李宗盛

成都

"'

results = re.findall('

.*?href="(.*?)">(.*?)',html,re.S)

print(results)

for result in results:

print(result)

re.sub

替换字符串中每一个匹配的的子串后返回替换后的字符串

sub(要替换的子串,替换成的子串,替换字符串)

import re

content = "Hello 1234567 World_This is a Demo"

result = re.sub('\d+','',content)

print(result)

re.compile

将正则字符串编译成正则表达式对象(将一个正则表达式串编译成正则对象,以便于复用该匹配模式)

import re

content = "Hello 1234567 World_This is a Demo"

patten = re.compile('Hello.*Demo',re.S)

result = re.search(patten,content)

print(result)

这里要注意re.S的使用,只能在compile中复制模式,到其它方法去匹配

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180101A0MSXR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券