正则表达式读取Python标记
我想用正则表达式读取标记中的元素,例如:正则表达式读取Python标记,python,html,regex,tags,Python,Html,Regex,Tags,我想用正则表达式读取标记中的元素,例如: <td>Stuff Here</td> <td>stuff </td> 这里的东西 东西 我正在使用以下命令:re.findall(re.compile('(.*))、str(line.strip()) 为什么我可以读取第一个标记,但不能读取第二个?首先,我假设行包含整个HTML文档,而不是其名称所暗示的一行 一个问题是默认情况下,与换行符不匹配: In [3]: re.findall('.', '\
<td>Stuff Here</td>
<td>stuff
</td>
这里的东西
东西
我正在使用以下命令:re.findall(re.compile('(.*))、str(line.strip())
为什么我可以读取第一个
标记,但不能读取第二个?首先,我假设行
包含整个HTML文档,而不是其名称所暗示的一行
一个问题是默认情况下,
与换行符不匹配:
In [3]: re.findall('.', '\n')
Out[3]: []
您要么需要删除嵌入的换行符(这strip()
不起作用),要么使用re.DOTALL
:
In [4]: re.findall('.', '\n', re.DOTALL)
Out[4]: ['\n']
另外,您应该将*
更改为*?
,以使表达式不贪婪
另一个更大的问题是,基于正则表达式的方法对于解析任意HTML来说不够通用。有关详细讨论,请参阅。有关一般情况,请参阅。你能做的最好的事情就是开始使用HTML解析器,有很多,IMHO是一个不错的选择。另请参见答案。我的
行
存储[…]
,它在for
循环中使用。实际上,我将我的答案改为:cell=line.find('td',text=True)
Beauty Soup的现代版本已经切换到在后端使用lxml.html
。为什么不直接使用呢?