ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python re正则表达式 findall和finditer 之间的区别/ 如何查看所有包含分组在内的匹配信息

2022-06-11 12:33:36  阅读:163  来源: 互联网

标签:finditer 21 Python 758 re findall match


finditer可以返回对象,而findall只会返回结果

比如对于如下 content

> **Theorem**
> Strategy game and stackelberg game in zero-sum are essentially identical.

- 竞争状态
  - 维持在一个次优的纳什均衡
- 合作状态
  - 确保合作状态能进行下去

> **Folk Theorem**
> 
...
> 在无限重复博弈中,假设存在单阶段NE$a^{*}$以及一个更优的群体策略$\hat{a}$
> 那么存在 $\delta$ 的某取值,可以使$(\hat{a},\hat{a},\dots,\hat{a})$成为SPNE

- 存在一个策略,使得各个玩家都有比竞争NE更好的收益

findall只返回了结果,并且可以看到,在有分组的情况下,findall只返回了分组的结果

finditer返回了re.Match object,并且包含 span=(0, 92), match='\n> Theorem\n> Strategy game and stackelberg等重要属性,可以获取包含分组在内的完全匹配信息

使用match.group()就可以恢复出包含分组在内的完整的匹配信息


https://stackoverflow.com/questions/3765024/different-behavior-between-re-finditer-and-re-findall

import re
CARRIS_REGEX=r'<th>(\d+)</th><th>([\s\w\.\-]+)</th><th>(\d+:\d+)</th><th>(\d+m)</th>'
pattern = re.compile(CARRIS_REGEX, re.UNICODE)
mailbody = open("test.txt").read()
for match in pattern.finditer(mailbody):
    print(match)
print()
for match in pattern.findall(mailbody):
    print(match)

prints

<_sre.SRE_Match object at 0x00A63758>
<_sre.SRE_Match object at 0x00A63F98>
<_sre.SRE_Match object at 0x00A63758>
<_sre.SRE_Match object at 0x00A63F98>
<_sre.SRE_Match object at 0x00A63758>
<_sre.SRE_Match object at 0x00A63F98>
<_sre.SRE_Match object at 0x00A63758>
<_sre.SRE_Match object at 0x00A63F98>

('790', 'PR. REAL', '21:06', '04m')
('758', 'PORTAS BENFICA', '21:10', '09m')
('790', 'PR. REAL', '21:14', '13m')
('758', 'PORTAS BENFICA', '21:21', '19m')
('790', 'PR. REAL', '21:29', '28m')
('758', 'PORTAS BENFICA', '21:38', '36m')
('758', 'SETE RIOS', '21:49', '47m')
('758', 'SETE RIOS', '22:09', '68m')

If you want the same output from finditer as you're getting from findall, you need

for match in pattern.finditer(mailbody):
    print(tuple(match.groups()))

标签:finditer,21,Python,758,re,findall,match
来源: https://www.cnblogs.com/zxyfrank/p/16365612.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有