马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
简介
本章是对前面正则表达式的增补。
一、复杂的查找更换等任务
- content = ''' 张三是脑卒中病
- 李四,是高血脂
- 苏齐,是肺结核病
- 六六,是血血血血'''
- import re
- p = re.compile(r'...病')
- for one in p.findall(content):
- print(one)
复制代码 运行结果:
代码分析:
- r'...病' 是一个原始字符串正则表达式模式
- . 在正则中表现恣意单个字符(除换行符)
- 三个连续的.表现匹配恣意三个字符
- 末了的病是字面匹配
- 团体模式匹配:四个字符的组合,前三个是恣意字符,第四个必须是"病"。
二、贪心模式与非贪心模式
1、贪心模式
- content = '<html><head>hello</head><title>Title</title></html>'
- import re
- p = re.compile(r'<.*>')
- for one in p.findall(content):
- print(one)
复制代码 运行结果:
代码分析:
1. 正则表达式 <.*> 分解:
- < 匹配标签开始的左尖括号
- .* 贪心模式:匹配恣意字符(尽大概多,直到末了一个 >)
- > 匹配标签竣事的右尖括号
2. 匹配过程演示:
输入字符串:
- <html><head>hello</head><title>Title</title></html>
复制代码 匹配过程:
- 找到第一个 < → 位置0
- 贪心匹配 .* → 直接跳到字符串末端
- 反向回溯找到末了一个 > → 位置47
- 终极匹配整个字符串:<html>...</html>
2、非贪心模式
- content = '<html><head>hello</head><title>Title</title></html>'import rep = re.compile(r'<.*?>')for one in p.findall(content): print(one)
复制代码 运行结果:
代码分析:
- 正则表达式 r'<.*?>' 分解:
- < 匹配标签开始的左尖括号
- .*? 非贪心模式,匹配恣意字符(尽大概少)
- > 匹配标签竣事的右尖括号
- 非贪心匹配 ? 的关键作用:
假如没有问号 <.*> 会匹配从第一个 < 到末了一个 > 的整个内容(贪心匹配),但由于加了 ?,它会匹配最短大概的片断,即逐个匹配每个标签。
📌 关键总结 正则表达式模式结果实用场景<.*>贪心匹配整个字符串险些不消于HTML分析<.*?>非贪心逐个匹配独立标签恰当简朴标签提取
三、常见题目与发起
1、特别字符须要转义
- # 错误写法(未转义.)
- re.findall(r'www.example.com', text)
- # 正确写法(转义.)
- re.findall(r'www\.example\.com', text)
复制代码 2、处置惩罚多行文本
- text = "第一行\n第二行\n第三行"
- # 启用多行模式(^匹配每行开头)
- re.findall(r'^第', text, flags=re.MULTILINE)
- # 输出: ['第', '第']
复制代码 3、性能优化发起
- pattern = re.compile(r'\d{5}') # 提前编译
- pattern.findall(text)
复制代码
|