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

时间:2011-05-29 11:01:54

标签: python string

我想从字符串中删除<p></p>(假设为s)。

现在我正在这样做:

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

我不确定我所做的事情是否正确,但这对我使用的大多数字符串都足够有效。

除此之外,我仍然会收到以下字符串:Here goes..</p>

还有其他有效的剥离方法吗?它不需要快速或有效。我需要有效的东西才能完成工作。

测试用例

让我们说:
s="<p>Here goes..</p>"

s上执行必要的操作后,print s应该给出:
Here goes..

5 个答案:

答案 0 :(得分:11)

如果您正在处理大量HTML / XML,您可能希望使用解析器轻松安全地操作它,而不是使用基本的字符串操作函数。我真的很喜欢BeautifulSoup这种工作。它适用于无效标记,并且具有非常优雅的API。

在您的示例中,您可以像这样使用它:

>>> soup = BeautifulSoup('<p>hello world</p>')
>>> soup.text
u'hello world'

答案 1 :(得分:7)

假设您没有尝试清理XML / HTML,以下内容将起作用:

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

答案 2 :(得分:3)

您正试图从您的值中删除"<p>""</p>"字符串中的所有字符。 strip将此值视为,它会删除所有"<p/或{来自你的字符串{1}}。

>

因此,使用>>> 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

或者您可以查看正则表达式。

答案 3 :(得分:0)

您可以使用正则表达式,只需导入和一行:

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

split("</p>")失败的原因是试图剥离</p>;不是</p>

答案 4 :(得分:0)

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