根据
标签的出现,拆分HTML文档/字符串的最佳方法是什么?我已经给出了我目前在下面提供的解决方案,但它看起来相当麻烦,并且我认为并不是那么容易阅读。我也尝试过正则表达式,但我被告知我不应该使用正则表达式来解析HTML
for i, br in enumerate(soup.findAll('b')):
line_value = ''
line_values = []
next = br.next
while (next):
if next and isinstance(next, Tag) and next.name == 'br':
line_values.append(line_value)
line_value = ''
else:
stripped_text = ''.join(BeautifulSoup(str(next).strip()).findAll(text=True))
if stripped_text:
line_value += stripped_text
next = next.nextSibling
print line_values
以下是我正在解析的HTML示例:
<p><font size="1" color="#800000"><b>09:00
<font> - </font>
11:00
<br>
CE4817
<font> - </font>LAB <font>- </font>
2A
<br>
B2043 B2042
<br>
Wks:1-13
</b></font>
</p>
我的代码的当前结果:
[u'09:00 - 11:00', u'CE4817 - LAB- 2A', u'B2043 B2042']
[u'11:00 - 12:00', u'CE4607 - TUT- 3A', u'A1054']
答案 0 :(得分:0)
用正则表达式分割
import re
p = re.compile(r'<br>')
filter(None, p.split(yourString))
然后,您可以从数组中返回的每个字符串中删除其他html标记。
您可以使用现有功能,例如Strip html from strings in python 或检查我对问题Stripping HTML tags without using HtmlAgilityPack的回答。
同时检查此答案:RegEx match open tags except XHTML self-contained tags
你应该真的使用html解析器来完成你的任务
答案 1 :(得分:0)
试试这个:
<强>正则表达式强>
<p><font size="1" color="#800000"><b>(\d{2}:\d{2}).*?(\d{2}:\d{2}).*?(\w{2}\d{4}).*?<font> - </font>(\w+)\s*<font>- </font>\s*(\d\w)\s*<br>\s*(\w\d{4}\s*\w\d{4})\s*<br>[\s\S]*?</p>
<强>模式强>
m - 多行
只要html代码的结构没有改变,这将有效。