python - 计算正则表达式的匹配索引
问题描述
<a>
我有一个 txt 文件 f,其中包含和标记之间的特定标记跨度</a>
。
例如:
<a>George</a> and his <a>friends</a>, came back <a>home</a>.
我使用 re's 匹配这些finditer
,但如果标签不是文本的一部分,我希望能够计算它们的索引。
例如,如果:乔治和他的朋友们回家了。
我所做的是
import re
text = "<a>George</a> and his <a>friends</a>, came back <a>home</a>"
tags = re.finditer('(?<=<a>).*?(?=</a>)',f)
获取标签以及跨度的开始和结束,然后
opening = re.finditer(r"<a>", f)
opening = [(i.group(0), i.start(), i.end()) for i in opening]
closing = re.finditer(r"</a>", f)
closing = [(i.group(0), i.start(), i.end()) for i in closing]
还可以获得跨度的开始和结束标签的索引。
如果标签不是文本的一部分,我该如何计算跨度的索引?我最初想分别从跨度的开始和结束处减去 -3,但是对于下一个跨度,这不起作用,因为我需要减去 -3 + 结束标记和开始标记之间的距离(我认为) .
我无法获取跨度然后在“干净”文本中查找它们,因为它们的位置是特定的,并且我不想匹配同一个单词的多次出现。
解决方案
计算处理的标签数量并相应地减去长度。
import re
text = "<a>George</a> and his <a>friends</a>, came back <a>home</a>"
tags = re.finditer('(?<=<a>).*?(?=</a>)',text)
num_tags = 0
results = []
for tag in tags:
start_idx = tag.start() - 7*num_tags - 3
end_idx = tag.end() - 7*num_tags - 4
num_tags += 1
results.append((tag.group(0),start_idx, end_idx))
推荐阅读
- r - 如何转换我的日期成为行条目而不是一列日期的数据框?
- java - Jackson 对象映射器没有从 java 对象创建正确的 Json 字符串
- node.js - 迭代数据并将其推送到数组后数组为空
- heroku - 如何在heroku上安装steamcmd?
- node.js - 在 Node.js Cloud Functions 中将 Firebase 时间戳设置为从今天起 2 周
- forms - 如何创建重定向到页面的搜索框?
- java - 如何解决此问题:失败 - 应用程序已存在于路径 /second
- machine-learning - 难以理解权重矩阵或 theta 矩阵的维度是 3X4 吗?
- python - 在python中创建一个矩阵,使得每个元素都是一个四元数
- ios - 发布模式下的 Flutter iOS 推送通知问题