Python: Правильный способ вырезать <p>и </p> из строки? - PullRequest
3 голосов
/ 29 мая 2011

Я хочу вырезать <p> и </p> из строки (скажем, s).

Прямо сейчас я делаю это:

s.strip('"<p>""</p>"')

Я не совсем уверен, что то, что я делаю, правильно, но это было достаточно эффективно с большинством строк, которые я использовал.

Кроме того, я все еще получаю следующую строку: Here goes..</p>

Есть ли другой эффективный способ раздеться? Это не нужно быстро или эффективно. Мне нужно что-то эффективное, чтобы сделать работу.

Контрольный пример

Скажем так:
s="<p>Here goes..</p>"

После выполнения необходимых операций на s, print s должно дать:
Here goes..

Ответы [ 5 ]

11 голосов
/ 29 мая 2011

Если вы имеете дело с большим количеством HTML / XML, вы можете использовать синтаксический анализатор, чтобы легко и безопасно манипулировать им, вместо использования основных функций обработки строк.Мне действительно нравится BeautifulSoup для такого рода работы.Он работает с неверной разметкой и имеет действительно элегантный API.

В вашем примере вы можете использовать его следующим образом:

>>> soup = BeautifulSoup('<p>hello world</p>')
>>> soup.text
u'hello world'
7 голосов
/ 29 мая 2011

Если вы не пытаетесь очистить XML / HTML, сработает следующее:

s = s.replace('<p>', '').replace('</p>', '') 
3 голосов
/ 29 мая 2011

Вы пытаетесь убрать все значения, присутствующие в строке "<p>""</p>", из ваших значений.strip обрабатывает это значение как set , оно удаляет любые ", <, p, / или > из вашей строки.

>>> s = 'Here goes "/p>'
>>> s.strip('"<p>""</p>"')
'Here goes '

Таким образом, использование striprstrip и lstrip) подходит только в том случае, если вы хотите удалить наборы символов, а не многосимвольную строку в целом.

Если выЕсли вы хотите удалить <p> с начала и </p> с конца, вы можете использовать следующее:

if s.startswith('<p>'):
     s = s[3:]
if s.endswith('</p>'):
     s = s[:-4]

Если вам нужно удалить их из другого места в строке, вам нужно использовать s.replace:

s.replace('<p>', '').replace('</p>', '')

или вы можете посмотреть регулярные выражения.

0 голосов
/ 29 июля 2013
s="<p>Here goes..</p>"
s = s.lstrip("<p>")
s = s.rstrip("</p>").strip('.')
0 голосов
/ 29 мая 2011

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

>>> import re
>>> s="text<p>text</p>text"
>>> re.sub("</?p>","",s)
'texttexttext'

Причиной сбоя split("</p>") является попытка удалить <, /, pили >;не </p>.

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