首页 > 解决方案 > 如何删除标记作为兄弟元素存在的python html文本中的所有元素

问题描述

我需要在 python 中解析脏的 html 字符串,我需要消除所有旁边有兄弟标签的文本。

例如,我需要转换这个 html。

    <p class="se_textarea">
        x3C!-- SE3-TEXT { --&gt;
    <span>
        <b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
        nnnnnnn
        <br>
    </span>
    <span>
        <b>어느곳에 설치 하셔도 예쁜..&nbsp;</b>
        <br>
    </span>
    </p>

到这个 html。

    <p class="se_textarea">
    <span>
        <b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
        <br>
    </span>
    <span>
        <b>어느곳에 설치 하셔도 예쁜..&nbsp;</b>
       <br>
    </span>
    </p>

由于x3C!-- SE3-TEXT { --&gt;是标签的兄弟,<span>并且 nnnnn 是<b>标签的兄弟,我需要删除此文本,而标签식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등中的唯一文本<b>我不需要删除它。

标签: pythonregexbeautifulsoup

解决方案


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>어느곳에 설치 하셔도 예쁜..&nbsp;</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>어느곳에 설치 하셔도 예쁜..&nbsp;</b>
        <br>
    </span>
    </p>

.

或者您可以使用特定的正则表达式并在必要时替换标签名称

>>> import re



>>> string = '''<p class="se_textarea">
        <span>
            <b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
            nnnnnnn
            <br>
        </span>
        <span>
            <b>어느곳에 설치 하셔도 예쁜..&nbsp;</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>어느곳에 설치 하셔도 예쁜..&nbsp;</b>
        <br>
    </span>
    </p>

推荐阅读