Почему это регулярное выражение не работает для этого HTML? - PullRequest
1 голос
/ 03 июня 2019
<div class="_1zGQT _2ugFP message-in">
    <div class="-N6Gq">
        <div class="copyable-text" data-pre-plain-text="[18:09, 3.6.2019] Лера сестра: ">
            <div class="_12pGw">
                <div class="_3X58t selectable-text invisible-space copyable-text">
                    <span class="_2ZDCk">
                        <img crossorigin="anonymous" src="URL" alt="?" draggable="false" class="_298rb _2FANH selectable-text invisible-space copyable-text" data-plain-text="?" style="visibility: visible;">
                    </span>
                </div>
            </div>
        </div>
    </div>
</div>

Я пытаюсь получить с этим кодом:

soup.find('div', class_=re.compile('^selectable-text invisible-space copyable-text'))

Все, что я получил: Нет.Проблема в том, что часть класса (_3X58t) меняется.

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Это может произойти из-за использования ^ якоря, который мы могли бы изменить на:

soup.find('div', class_=re.compile('selectable-text invisible-space copyable-text'))

или мы могли бы попробовать это выражение для divs:

(.+?selectable-text invisible-space copyable-text)

Демо

0 голосов
/ 03 июня 2019

Сначала я посмотрю, можно ли использовать один класс из списка составных классов, например,

soup.select_one('.selectable-text')

Остальные комбинированные классы

soup.select_one('[class$="selectable-text invisible-space copyable-text"]')

Вместо того, чтобы прибегать к регулярному выражению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...