2.1、匹配目标

​ 使用括号()将想要提取的字符串括起来。()实际上标记了一个子表达式的开始和结束位置,被标记的每个子表达式依此对应每个分组,调用group方法传入分组的索引即可获得提取结果。

content = 'Hello 1234567 World\_This is a Regex Demo'

result = re.match('^Hello\s(\d+)\sWorld',content)

print(result) #

print(result.group()) # Hello 1234567 World

print(result.group(1)) # 1234567

print(result.span()) # (0, 19)

# 成功得到被括号括起来的1234567,group()会输出完整的匹配结果,而group(1)会输出第一个括号的匹配结果,同理,若还有括号,可group(2)、group(3)...

2.2、通用匹配

​ 上述空白字符需要写\s匹配、数字\d匹配,量大。因此,万能匹配:.* 其中.可以匹配任意字符(除换行符),*代表匹配前面字符无数次。改写上述代码:

content = 'Hello 123 4567 world\_This is a Regex Demo'

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

print(result) #

print(result.group()) # Hello 123 4567 world\_This is a Regex Demo

print(result.span()) # (0, 41)

2.3、贪婪与非贪婪

贪婪匹配下、**.会匹配尽可能多的字符*。非贪婪匹配、.*?会匹配尽可能少的字符、但如果匹配的结果在字符串结尾,则可能匹配不到任何内容。

import re

content = 'Hello 1234567 World\_This is a Regex Demo'

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

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

print(result1.group(1)) # 7

print(result2.group(1)) # 1234567

# 贪婪匹配下、.\*把123456都匹配了,只剩下7给\d+匹配。

# 非贪婪匹配下、.\*?把1234567交给\d+匹配。

2.4、修饰符

​ 当遇到换行符时,.*?就不能匹配了。此时,加上修饰符re.S即可修正。

import re

content = '''Hello 1234567 World\_This

is a Regex Demo'''

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

print(result.group(1)) # 1234567

修饰符描述re.I使匹配对大小写不敏感re.L实现本地化识别(locale-aware)匹配re.M多行匹配,影响^和$re.S使匹配内容包括换行符在内的所有字符re.U根据Unicode字符集解析字符,这个标志会影响\w、\W、\b和\B\re.X该标志能够给予你更灵活的格式,以便将正则表达式书写的便于理解

2.5、转义匹配

​ 当目标字符串中遇到用作正则匹配模式的特殊字符时,在 此字符前面加反斜杠\转义一下即可。

content = '(百度)www.baidu.com'

result = re.match('\(百度\)www\.baidu\.com',content)

print(result) #

2.6、search

​ **search方法在匹配时会扫描整个字符串,然后返回第一个匹配成功的结果。**也就是说,正则表达式可以是字符串的一部分。在匹配时,search方法会依次以每个字符作为开头扫描字符串,直到找到第一个符合规则的字符串,然后返回匹配的内容。

content = 'Extra stings Hello 1234567 World\_This s Regex Demo Extra stings'

result = re.search('Hello.\*?(\d+).\*?Demo',content)

print(result) # 1234567

2.7、findall

​ findall方法能获取与正则表达式相匹配的所有字符串。其返回的结果是列表类型,需要通过遍历来依次获取每组内容。

# 上述代码改写

results = re.findall('(.\*?)',html,re.S)

for result in results:

# print(result)

print(result[0],result[1],result[2])

#/2.mp3 任贤齐 沧海一声笑

#/3.mp3 齐泰 往事随风

#/4.mp3 beyond 光辉岁月

#/5.mp3 陈慧琳 记事本

#/6.mp3 邓丽君 但愿人长久

2.8、sub

​ 除了使用正则表达式提取信息,还可借助来修改文本。

content = '54aK54yr5oiR54ix5L2g'

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

print(content)

# aKyroiRixLg

# sub()方法中的第一个参数传入\d+匹配所有数字,第二个参数中传入把数字替换成的字符串,第三个参数是原字符串。

html = re.sub('|','',html)

print(html)

results = re.findall('(.\*?)',html,re.S)

for result in results:

print(result.strip())

# 一路上有你

#沧海一声笑

#往事随风

#光辉岁月

#记事本

#但愿人长久

# sub方法处理后,a节点就没有了,然后findall方法直接提取即可。

2.9、compile

compile可以将正则表达式编译成正则表达式对象,以便在后面的匹配中复用。可以说compile方法是给正则表达式做了一层封装。

content1 = '2019-12-15 12:00'

content2 = '2019-12-17 12:55'

content3 = '2019-12-22 12:55'

pattern = re.compile('\d{2}:\d{2}') # 去掉时间正则表达式

result1 = re.sub(pattern,'',content1) # 复用

result2 = re.sub(pattern,'',content2)

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

print(result1,result2,result3)

# 2019-12-15 2019-12-17 2019-12-22

四、httpx的使用*

​ 有些网站强制使用HTTP/2.0协议访问,这时urllib和reequests是无法爬取数据的,因为它们只支持HTTP/1.1。

​ hyper和httpx是支持HTTP/2.0的请求库,requests已有的功能它几乎都支持。

1、示例*

url = 'https://spa16.scrape.center/'

response = requests.get(url)

print(response.text) # 报错,无法访问

2、安装

pip3 install "httpx[http2]"

3、基本使用

GET请求:

import httpx

client = httpx.Client(http2=True)

response = client.get('https://spa16.scrape.center')

print(response.text)

大多与requests相似

4.Client对象

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。