【发布时间】:2019-08-03 10:51:51
【问题描述】:
我有 html 文本,我只想确定文本中可用的 html 标签。
html_text = '<p class="gmail-m3464245979397595798gmail-m6143070745855285966gmail-m-3072962113628903492gmail-m-7999079541169053160wordsection1" style="margin:0in;margin-bottom:.0001pt">Position Title: Onsite Client Services Associate<br /> Duration: 7 months<br /> Location: Tempe, AZ 85282<br /> <br /> <b><u>Roles and responsibilities</u></b><o:p></o:p></p> <p class="gmail-m3464245979397595798gmail-m6143070745855285966gmail-m-3072962113628903492gmail-m-7999079541169053160wordsection1" style="margin-top:5.0pt;margin-right:0in;margin-bottom:0in;margin-left:.25in; margin-bottom:.0001pt"><span style="font-family:Symbol">·</span><span style="font-size:7.0pt"> </span>Primary function during peak season (July-December) will be an onsite presence at our large client in the Phoenix area. <o:p></o:p></p>'
作为第一步,我从每个 html 标签的文本中解析每个标签
喜欢html_text.find('</p>')。由于通过检查每个标签来解析很长,我试图使用正则表达式
re.findall(r'\<\/.>', html_text)
上面的输出是['</p>', '</b>', '</u>']。但我希望输出为['</p>','</span>', '<br />', '</b>', '</u>']。所以如果我修改
re.findall(r'\<\/.*>', html_text)
假设我可以得到</span>,我得到了整个文本。
['</u></b><o:p></o:p></p> <p class="gmail-m3464245979397595798gmail-m6143070745855285966gmail-m-3072962113628903492gmail-m-7999079541169053160wordsection1" style="margin-top:5.0pt;margin-right:0in;margin-bottom:0in;margin-left:.25in; margin-bottom:.0001pt"><span style="font-family:Symbol">·</span><span style="font-size:7.0pt"> </span>Primary function during peak season (July-December) will be an onsite presence at our large client in the Phoenix area. <o:p></o:p></p>']
有没有办法可以将所有标签的表达式写成一个表达式,或者我应该为每个标签写条件检查?在上面我无法确定<br />。
【问题讨论】:
-
试试
re.findall(r'</?(\w+)[^>]*>', html_text) -
感谢@WiktorStribiżew 的精彩回答,w+ 对表达式做了什么?
标签: html regex python-3.x