Как сохранить символы с регулярными выражениями, которые я не хочу удалять в python? - PullRequest
0 голосов
/ 30 апреля 2019

Я использую этот код для удаления всех элементов тега в HTML.

import re
MyString = 'aaa<p>Radio and television.<br></p><p>very<br/> popular in the world today.</p><p>Millions of people watch TV. </p><p>That’s because a radio is very small <span_style=":_black;">98.2%</span></p><p>and it‘s easy to carry. <span_style=":_black;">haha100%</span></p>bb'
MyString = re.sub('<[^>]*>', '', MyString)
print(MyString)

Вывод:

aaaRadio and television.very popular in the world today.Millions of people watch TV. That’s because a radio is very small 98.2%and it‘s easy to carry. haha100%bb

Но теперь мне нужно сохранить <br> и <br/>.

Я хочу, чтобы вывод понравился так:

aaaRadio and television.<br>very<br/> popular in the world today.Millions of people watch TV. That’s because a radio is very small 98.2%and it‘s easy to carry. haha100%bb

Как изменить мой код?

1 Ответ

1 голос
/ 30 апреля 2019

Вы можете захватить <br> теги отдельно в group1 и захватить любой другой тег отдельно и заменить все совпадение на \1, чтобы сохранить <br> теги и удалить остальные остальные теги. Заменить

(?i)(<br\/?>)|<[^>]*>

с \1. Также добавлен (?i) встроенный модификатор (вы также можете передать re.IGNORECASE в качестве четвертого аргумента в re.sub, чтобы сделать его нечувствительным к регистру), чтобы сделать регулярное выражение нечувствительным к регистру для совпадения его с <BR> или <BR/>

Regex Demo

Ваш обновленный код Python,

import re
MyString = 'aaa<p>Radio and television.<br></p><p>very<br/> popular <BR>in the <BR/>world today.</p><p>Millions of people watch TV. </p><p>That’s because a radio is very small <span_style=":_black;">98.2%</span></p><p>and it‘s easy to carry. <span_style=":_black;">haha100%</span></p>bb'
MyString = re.sub('(?i)(<br/?>)|<[^>]*>', r'\1', MyString)
print(MyString)

Печать строки с использованием только тега br и удалением остальных тегов,

aaaRadio and television.<br>very<br/> popular <BR>in the <BR/>world today.Millions of people watch TV. That’s because a radio is very small 98.2%and it‘s easy to carry. haha100%bb

В другом подходе вы также можете использовать отрицательный взгляд вперед, чтобы отклонить теги, которые br используют это регулярное выражение,

(?i)<(?!br/?>)[^>]*>

и просто замените его пустой строкой.

Демонстрация регулярного выражения с использованием отрицательного взгляда на отклонение

код Python с использованием отрицательного регулярного выражения,

import re
MyString = 'aaa<p>Radio and television.<br></p><p>very<br/> popular <BR>in the <BR/>world today.</p><p>Millions of people watch TV. </p><p>That’s because a radio is very small <span_style=":_black;">98.2%</span></p><p>and it‘s easy to carry. <span_style=":_black;">haha100%</span></p>bb'
MyString = re.sub('(?i)<(?!br/?>)[^>]*>', r'', MyString)
print(MyString)

печать

aaaRadio and television.<br>very<br/> popular <BR>in the <BR/>world today.Millions of people watch TV. That’s because a radio is very small 98.2%and it‘s easy to carry. haha100%bb
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...