1.正则表达式
(1)re的findall()方法
import re
r_list = re.findall('AB', 'ABCABDDGAAGDSGSDG') #后匹配前
print(r_list)
#输出:['AB', 'AB']
(2)也可以写作下面
import re
pattern = re.compile('AB')
r_list = pattern.findall('ABCABDDGAAGDSGSDG')
print(r_list)
2.常用元字符
. 任意一个字符(不包括\n)
\d 一个数字
\s 空白字符
\S 非空白字符
[] 包含[]内容
* 出现0次或多次
+ 出现1次或多次
\w+ 普通字符出现一次或多次
匹配任意一个字符的正则表达式:
(1)使用[\s\S]
pattern = re.compile('[\s\S]')
result = pattern.findall(html)
(2)使用re.S
pattern = re.compile('.‘,re.S)
result = pattern.findall(html)
re模块使用流程:
(1)方法1
r_list = re.findall('正则表达式',html,re.S)
(2)方法2
pattern = re.compile('正则表达式',re.S)
r_list = pattern.findall(html)
使用findall()方法得到的结果一定是列表,re.S作用为正则表达式元字符,. 可匹配\n在内的所有字符
3.贪婪匹配和非贪婪匹配
(1)贪婪匹配:在整个表达式匹配成功的前提下,尽可能多匹配 * + ?
表达式: .* .+ .?
(2)非贪婪匹配:在整个表达式匹配成功的前提下,尽可能多匹配 * + ?
表达式:.*? .+? .??
例子:
import re
html = '''
<div><p>XXXXXXXXX</div></p>
<div><p>XXXXXXXXXX</div></p>
'''
pattern = re.compile('<div><p>.*?</div></p>',re.S)
r_list = pattern.findall(html)
print(r_list)
pattern = re.compile('<div><p>(.*?)</div></p>',re.S)
r_list = pattern.findall(html)
print(r_list)
#只匹配XXX内容
##贪婪匹配</div></p>也会被认为任意字符,所有使用非贪婪匹配解决上面匹配特定内容问题
例子:
import re
html = 'A B C D'
pattern = re.compile('\w+\s+\w+',re.S)
r_list = pattern.findall(html)
print(r_list)
输出:['A B', 'C D']
import re
html = 'A B C D'
pattern = re.compile('(\w+)\s+\w+',re.S)
r_list = pattern.findall(html)
输出:['A', 'C']
总结:
在网页中想抓取什么内容,就在正则表达式中此位置加()
匹配时先按照整体正则匹配,然后再提取分组()中内容
2及以上分组(),则结果中以元组形式显示[(),(),()]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App