Python:从字符串中正确去除<p>和</p>的方法?

3
我希望将字符串(例如s)中的

标签去除。
目前我是这样做的:
s.strip('"<p>""</p>"')

我并不确定我所做的是否正确,但对于我使用过的大多数字符串来说,这已经足够有效了。

除了以下字符串:Here goes..</p>

还有其他有效的去除方法吗?它不需要快速或高效。我需要一些有效的方法来完成工作。

测试用例

假设:
s="<p>Here goes..</p>"

在对 s 进行必要操作后,print s 应该输出:
Here goes..


首先,在问题中添加一些测试用例,包括输入和期望输出。 - sorin
@sorin - 已添加。希望这样可以。 - bcosynot
5个回答

10
如果你处理大量的HTML/XML,可能想要使用一个解析器来轻松安全地操作它,而不是使用基本的字符串操作函数。我非常喜欢BeautifulSoup来完成这种工作。它可以处理无效的标记,并拥有精美的API。
在你的例子中,你可以这样使用它:
>>> soup = BeautifulSoup('<p>hello world</p>')
>>> soup.text
u'hello world'

+1 为BeautifulSoup点赞!我也非常喜欢它。但是我没有使用很多标签,而且我不想为了一个可能有或没有HTML标签的字符串而使用不同的模块。在这里,简单的字符串操作就可以完成工作。 - bcosynot

8
假设您不想对XML / HTML进行净化处理,则以下内容将起作用:
s = s.replace('<p>', '').replace('</p>', '') 

3

您正在尝试从值中删除包含在"<p>""</p>"字符串中的所有字符。 strip 将此值视为集合,它将从您的字符串中删除任何"<p/>

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

因此,仅使用strip(以及rstriplstrip)适用于删除字符集,而不是整个多字符字符串。

如果您想从开头删除<p>并从结尾删除</p>,可以使用以下方法:

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

如果您需要从字符串中的其他位置删除它们,您需要使用s.replace

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

或者您可以了解正则表达式。

非常感谢您的解释。我对.strip操作(以及其变体)感到非常困惑。 - bcosynot

0

你可以使用正则表达式来实现,只需一行代码和一个导入:

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

split("</p>") 失败的原因是试图去除 </p 或者 >,而不是 </p>


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接