首页 > 解决方案 > 重复分隔符并提取它们之间的字符串

问题描述

我对 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']

有什么我做错了吗?我已经研究过了,这似乎是一种使用重复分隔符提取多个子字符串的方法。

标签: pythonhtmlsubstringtext-extraction

解决方案


这是因为<td.*>将匹配它可以匹配的最长字符串,即<td (some possible parameters)> EXTRACT_THIS </td> <td (some possible parameters)>.

您也应该使用非贪婪量词<td>

'<td.*?>(.*?)</td>'

推荐阅读