Удалять div, когда есть какая-то строка Python - PullRequest
0 голосов
/ 04 февраля 2020

Здравствуйте, мне нужно удалить div, когда жало содержит: <!--googleoff: index-->

Итак, у меня есть код:

<span>TEXT</span><div><!--googleoff: index--> some other text</div><p>Some string</p>

И мне нужно, чтобы вывод выглядел следующим образом

<span>TEXT</span><p>Some string</p>

Я пытаюсь найти способ сделать это в b4s, но не могу найти решение.

РЕДАКТИРОВАТЬ Полная строка:

<div style="font-size: 18px"><p><span style="font-size:18px;"><strong>Drivstofftankmonteringsdeler - Toyota Rav 4 2000-2006</strong></span></p></div><div style="font-size: 18px"> </div><div style="font-size: 18px"><!--googleoff: index-->En drivstofftank er en viktig del av bilen. Hvilken som helst motor er avhengig av drivstoffsystem med korrekt funksjon og bare den beste kvaliteten garanterer sikker kjøring. Det er derfor ikke verdt å prøve å spare på drivstofftanken eller drivstoffsystemet. Velg NOMAX.NO for å vćre sikker på at du får best mulig kvalitet.<br /><br />Lurer du på om den valgte drivstofftanken er riktig for bilen din? Ta kontakt med oss på telefon eller send en e-post. Våre eksperter svarer gjerne på alle dine spørsmål og vil gjerne hjelpe deg med å velge de riktige delene som passer til bilen din.<br /> </div><p><span style="font-size:18px;">- 2stk</span></p><p><span style="font-size:18px;">- høy kvalitet</span></p><p><span style="font-size:18px;">- bredde 12mm</span></p>

КОД:

import re
regex = r'<div style="font-size: 18px">.*?<!--googleoff: index-->.*?</div>'
input = '<div style="font-size: 18px"><p><span style="font-size:18px;"><strong>Drivstofftankmonteringsdeler - Toyota Rav 4 2000-2006</strong></span></p></div><div style="font-size: 18px"> </div><div style="font-size: 18px"><!--googleoff: index-->En drivstofftank er en viktig del av bilen. Hvilken som helst motor er avhengig av drivstoffsystem med korrekt funksjon og bare den beste kvaliteten garanterer sikker kjøring. Det er derfor ikke verdt å prøve å spare på drivstofftanken eller drivstoffsystemet. Velg NOMAX.NO for å vćre sikker på at du får best mulig kvalitet.<br /><br />Lurer du på om den valgte drivstofftanken er riktig for bilen din? Ta kontakt med oss på telefon eller send en e-post. Våre eksperter svarer gjerne på alle dine spørsmål og vil gjerne hjelpe deg med å velge de riktige delene som passer til bilen din.<br /> </div><p><span style="font-size:18px;">- 2stk</span></p><p><span style="font-size:18px;">- høy kvalitet</span></p><p><span style="font-size:18px;">- bredde 12mm</span></p>'
output = re.sub(regex, "", input)
print(output)

1 Ответ

1 голос
/ 04 февраля 2020

Для этого вы можете использовать регулярное выражение . Кроме того, вам может быть полезен интерактивный интерфейс, , например , потому что регулярные выражения могут быть переменчивыми и работать по-разному в разных языках / библиотеках и иметь флаги (нечувствительность к регистру, поддержка юникода, ...).

Вот одна проблема, которую я придумала для вашей проблемы:

<div><!--googleoff: index-->.*?</div>

Что означает «фетиш» .*??

  • . означает «соответствует любому символу»
  • * означает «соответствует предыдущей вещи любое количество раз [включая ноль] '
  • `? ' означает «сделать предыдущий сопоставитель не жадным»

Я не являюсь богом регулярных выражений (обычное сокращение для регулярных выражений), но последний является python speci c или, по крайней мере, не универсальным. Некоторые движки регулярных выражений могут не поддерживать их или использовать другой способ их указания. Итак, что они означают вместе?

  • .* означает «соответствовать любому символу любое количество раз» (в основном, все идет)
  • .*? означает «соответствовать любому символу любой количество раз, но предпочитают более короткие '

По умолчанию совпадения регулярных выражений жадные в большинстве двигателей. Почему мы хотим не жадные? Если у вас есть повторы, представьте, что у нас есть ввод:

<span>TEXT</span><div><!--googleoff: index--> some other text</div><p>Some string</p><div><!--googleoff: index--> some more text</div>

Жадный подход (без ?) приведет к следующему неверному выводу:

<span>TEXT</span>

вместо

<span>TEXT</span><p>Some string</p>

Итак, как вы выполняете это в Python? Вот так:

import re
regex = r"<div><!--googleoff: index-->.*?</div>"
input = "<span>TEXT</span><div><!--googleoff: index--> some other text</div><p>Some string</p>"
output = re.sub(regex, "", input)
print(output)

Хорошей практикой является использование r в качестве префикса для ваших регулярных выражений, так как это упрощает экранирование, хотя в этом случае это не имеет значения, я думаю, но я предпочитаю не рисковать .

Обратите внимание, что в этом ответе я игнорирую, что это какой-то HTML / XML / структурированный текст и что есть способы сделать это, которые фактически проанализируют его и позволят вам пройти по дереву элементов и т. Д. так далее. Это также может быть хорошим способом приблизиться к нему, но для сценария может быть излишним и иметь непреднамеренные последствия (делает ли это обратное обращение к той же панели исходного кода, удаляя это div? Я бы не положил руку в огонь для который). Это, однако, также означает, что существуют ограничения (например, если в удаляемом теге div есть еще один тег div, он не будет работать корректно. Это невозможно исправить в регулярном выражении из-за его слишком сложного использования, и его потребуется использовать парсер, так как он требует стека.

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