Для этого вы можете использовать регулярное выражение . Кроме того, вам может быть полезен интерактивный интерфейс, , например , потому что регулярные выражения могут быть переменчивыми и работать по-разному в разных языках / библиотеках и иметь флаги (нечувствительность к регистру, поддержка юникода, ...).
Вот одна проблема, которую я придумала для вашей проблемы:
<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
, он не будет работать корректно. Это невозможно исправить в регулярном выражении из-за его слишком сложного использования, и его потребуется использовать парсер, так как он требует стека.