python - 重复分隔符并提取它们之间的字符串
问题描述
我对 Python 和正则表达式相当陌生,并且希望从 html 文件中提取信息。
假设下面是 html 文件中给出的一行(因为 html 没有“看到”空白,我们的示例在同一行)
<td (some possible parameters)> EXTRACT_THIS </td> <td (some possible parameters)> ALSO_EXTRACT_THIS </td>
在我当前的代码中:
with open(myInput, 'r') as inputFile:
for line in inputFile:
line = line.strip()
if line != '':
m = re.findall('<td.*>(.*?)</td>', line)
if m:
#strip() again
print(m)
这只会打印:
['ALSO_EXTRACT_THIS']
而不是我想要的
['EXTRACT_THIS', 'ALSO_EXTRACT_THIS']
有什么我做错了吗?我已经研究过了,这似乎是一种使用重复分隔符提取多个子字符串的方法。
解决方案
这是因为<td.*>
将匹配它可以匹配的最长字符串,即<td (some possible parameters)> EXTRACT_THIS </td> <td (some possible parameters)>
.
您也应该使用非贪婪量词<td>
:
'<td.*?>(.*?)</td>'
推荐阅读
- shader - SideFX Houdini 每像素表面位置和整个场景的法线
- python - AttributeError:“函数”对象没有属性“执行”
- boolean - 使用 RxSwift 忽略布尔变量的快速变化
- javascript - 数组的反序列化不支持类
- c# - 如何使用 Selenium 和 C# 删除元素属性?
- react-native - react-native navigationV3 集成 redux
- ajax - 由于 AJAX 无法选择文本
- java - Google 登录 使用后端服务器进行身份验证
- css - 如何从以前的兄弟姐妹中删除边框?
- vba - 比较两个 VBA 代码以获取邮件项的 SMTP 地址