Python3爬虫从零开始:正则表达式

正则表达式测试工具:http://tool.oschina.net/regex#

实例1:match()

import re

content = 'Hello 123 4567 World_This is a Regex Demo'

print(len(content))

result = re.match('^Hello\s\d\d\d\s\d{4}\s\w{10}',content)

print(type(result))

print(result.group()) #输出匹配到的内容

print(result.span()) #输出匹配的方法

结果:

注意:如果re.macth()匹配不成功,print(type(result))的结果会是<class 'NoneType'>。  之后的print也会出错。

实例2:匹配目标。可以使用()括号将想提取的子字符串括起来。

import re

import re

content = 'Hello 123 4567 World_This is a Regex Demo'

print(len(content))

result = re.match('^Hello\s(\d\d\d)\s(\d{4})\s\w{10}',content)

print(result.group())

print(result.group(0))

print(result.group(1)) #提取第1个括号中的匹配结果 “123”

print(result.group(2)) #提取第2个括号中的匹配结果 “4567”

print(result.span())

结果:

注意:result.group(0)中存放的是整个匹配结果!

实例3:贪婪匹配和非贪婪匹配

import re

content = 'Hello 123 4567 World_This is a Regex Demo'

result1 = re.match('^He.*(\d+).*Demo$',content) #“.*”贪婪匹配,会匹配尽可能多的字符

print(result1)

print(result1.group(1))

result2 = re.match('^He.*?(\d+).*Demo$',content) #“.*?”非贪婪匹配,会匹配尽可能少的字符

print(result2)

print(result2.group(1))

结果:

注意:非贪婪放结尾可能匹配不到任何内容:

import re

content = 'http://www.baidu.com/comment/lic'

result1 = re.match('http.*comment/.*',content)

result2 = re.match('http.*comment/.*?',content)

print(result1.group())

print(result2.group())

实例4:match()与search()

match()方法是从字符串的开头开始匹配,一旦开头不匹配则匹配失败,更适合用来检测某个字符串是否符合某个正则表达式规则。search()方法在匹配时扫描整个字符串,然后返回第一个成功匹配的结果。

import re

content = 'Extra string Hello 1234567 World xixixi oyo'

result1 = re.match('Hello.*?(\d+).*?xixixi',content)

result2 = re.search('Hello.*?(\d+).*?xixixi',content)

print(result1)

print(result2)

结果:

实例5:findall()获取匹配正则式的所有内容。

            sub()修改文本。接受3个参数(a,b,c):a为匹配对象,b为替换字符串,c为原字符串。

            compile()将正则字符串编译成正则表达式对象

import re

content1 = "<a href = '/2.mp3' singer = '啊哈'>哼哼哈嘿</a>" \

"<a href = '/3.mp3' singer = '笑笑'>嘤嘤呀呀</a>"

content2 = "asad32432<asd>dasd</sad>222"

res1 = re.findall('^<a.*a>$',content1,re.S)

print(res1)

res2 = re.sub('<a.*?>|</a>','',content1)

print(res2)

content3 = '2018-10-16 11:21'

pattern = re.compile('\d{2}:\d{2}')

res3 = re.sub(pattern,'',content3)

print(res3)

结果:

猜你喜欢

转载自blog.csdn.net/qq_26736193/article/details/83118668
今日推荐