Как я могу удалить все элементы в тексте Python HTML, где тег существует как элемент родного брата - PullRequest
0 голосов
/ 28 марта 2019

Мне нужно проанализировать грязную HTML-строку в python, где мне нужно удалить все тексты, у которых рядом есть родственный тег.

Например, мне нужно конвертировать этот 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>, который мне не нужен. убери это.

1 Ответ

0 голосов
/ 29 марта 2019

Дракончик, это очень специфично, потому что вы действительно предоставили только один пример, поэтому я не уверен, какие теги появятся, поэтому у вас есть 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...