python正则表达式中的多行匹配
我想从html页面中提取python正则表达式中的多行匹配,python,Python,我想从html页面中提取标记之间的数据。我使用了下面的代码,但没有得到任何结果。标记之间的html是多行的 category =re.findall('<tr>(.*?)</tr>',data); category=re.findall(“(.*)”,数据); 请建议解决此问题。不要使用正则表达式解析HTML。使用HTML解析器,例如or.pat=re.compile(“(.*?”),re.DOTALL | re.M) 打印pat.findall(数据) 或非正则表
标记之间的数据。我使用了下面的代码,但没有得到任何结果。
标记之间的html是多行的
category =re.findall('<tr>(.*?)</tr>',data);
category=re.findall(“(.*)”,数据);
请建议解决此问题。不要使用正则表达式解析HTML。使用HTML解析器,例如or.
pat=re.compile(“(.*?”),re.DOTALL | re.M)
打印pat.findall(数据)
或非正则表达式方式
for item in data.split("</tr>"):
if "<tr>" in item:
print item[item.find("<tr>")+len("<tr>"):]
用于数据中的项。拆分(“”):
如果项目中有“”:
打印项目[项目.查找(“”+len(“”):]
不要使用正则表达式,请使用HTML解析器,例如:
结果:
[<tr>bar</tr>, <tr>qux</tr>]
bar
qux
使用HTML解析器并不像听起来那么可怕!而且它的工作将比这里发布的任何正则表达式都更可靠。正如其他人所建议的,您遇到的具体问题可以通过使用允许多行匹配来解决 然而,您正在经历一个危险的补丁解析过程。改为使用XML/HTML解析器,这非常有用
doc = """<table border="1">
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>"""
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(doc)
all_trs = soup.findAll("tr")
doc=”“”
第1行,第1单元
第1行第2单元
第2行第1单元
第2行,第2单元
"""
从BeautifulSoup导入BeautifulSoup
汤=美汤(doc)
all_trs=soup.findAll(“tr”)
只是为了解决这个问题。尽管所有这些链接都指向re.M
,但它在这里不起作用,因为只要浏览一下它的解释就会发现。如果不尝试解析html,您需要re.S
,当然:
>>> doc = """<table border="1">
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>"""
>>> re.findall('<tr>(.*?)</tr>', doc, re.S)
['\n <td>row 1, cell 1</td>\n <td>row 1, cell 2</td>\n ',
'\n <td>row 2, cell 1</td>\n <td>row 2, cell 2</td>\n ']
>>> re.findall('<tr>(.*?)</tr>', doc, re.M)
[]
>>doc=”“”
第1行,第1单元
第1行第2单元
第2行第1单元
第2行,第2单元
"""
>>>关于findall(“(.*?”,文件,关于S)
['\n第1行,第1单元格\n第1行,第2单元格\n',
'\n第2行,单元格1\n第2行,单元格2\n']
>>>关于findall(“(.*?”,文件,关于M)
[]
阅读文档:或上面的一段:)@Tomasz:但一定要阅读页眉以外的内容;)re.findall(“(?”),doc,re.S)
也可以写成re.findall(“(?)(*?”,doc)
。
bar
qux
doc = """<table border="1">
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>"""
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(doc)
all_trs = soup.findAll("tr")
>>> doc = """<table border="1">
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>"""
>>> re.findall('<tr>(.*?)</tr>', doc, re.S)
['\n <td>row 1, cell 1</td>\n <td>row 1, cell 2</td>\n ',
'\n <td>row 2, cell 1</td>\n <td>row 2, cell 2</td>\n ']
>>> re.findall('<tr>(.*?)</tr>', doc, re.M)
[]