我需要在python中解析脏的html字符串,在其中我需要消除所有旁边带有兄弟标记的文本。
例如,我需要转换此html。
<p class="se_textarea">
x3C!-- SE3-TEXT { -->
<span>
<b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
nnnnnnn
<br>
</span>
<span>
<b>어느곳에 설치 하셔도 예쁜.. </b>
<br>
</span>
</p>
此html。
<p class="se_textarea">
<span>
<b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
<br>
</span>
<span>
<b>어느곳에 설치 하셔도 예쁜.. </b>
<br>
</span>
</p>
由于x3C!-- SE3-TEXT { -->
是<span>
的兄弟姐妹,而nnnnn是<b>
标记的兄弟姐妹,因此我需要删除此纹理,而식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등
是{{ 1}}标签,不需要删除它。
答案 0 :(得分:0)
Whelp,这是非常具体的部分原因,因为您确实只提供了一个示例,所以我不确定会出现哪种标签,所以您有2个选择。
独立的正则表达式通常不是最适合html的,但是我希望这会有所帮助。 BeautifulSoup或lxml最终可能会更好。
使用re.sub(对于Python3),如果格式相对一致,则可以使用距离,因此,我要说的是替换任何以<
开头的文本(如果以7开头)或更多空格
>>> import re
>>> string = '''<p class="se_textarea">
<span>
<b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
nnnnnnn
<br>
</span>
<span>
<b>어느곳에 설치 하셔도 예쁜.. </b>
<br>
</span>
</p>'''
>>> print(re.sub('(?m)\n[\ ]{7,}(?!<)[\S]+(?=\n|$)', '', string))
#OUTPUT
<p class="se_textarea">
<span>
<b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
<br>
</span>
<span>
<b>어느곳에 설치 하셔도 예쁜.. </b>
<br>
</span>
</p>
。
或者您可以使用特定的正则表达式并在必要时替换标记名称
>>> import re
>>> string = '''<p class="se_textarea">
<span>
<b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
nnnnnnn
<br>
</span>
<span>
<b>어느곳에 설치 하셔도 예쁜.. </b>
<br>
</span>
</p>'''
>>> print(re.sub(r'(<span>[\S\s]*?<[\S\s]*?>[\S\ ]*?</[\S\s]*?>[\s]*?)([\S\s]*?)(\n[\ ]+<)', r'\1\3', string))
#OUTPUT
<p class="se_textarea">
<span>
<b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
<br>
</span>
<span>
<b>어느곳에 설치 하셔도 예쁜.. </b>
<br>
</span>
</p>