Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式读取Python标记_Python_Html_Regex_Tags - Fatal编程技术网

正则表达式读取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
。为什么不直接使用呢?