我正在处理一个包含第1项,第2项和第3项的html文件。我想删除最后一项之后的所有文本2.文件中可能有多个第2项。我正在使用它,但它不起作用:
text = """<A href="#106">Item 2. <B>Item 2. Properties</B> this is an example this is an example"""
>>> a=re.search ('(?<=<B>)Item 2.',text)
>>> b= a.group(0)
>>> newText= text.partition(b)[0]
>>> newText
'<A href="#106">'
它删除第一个项目2之后的文本而不是第二个项目。
答案 0 :(得分:1)
我使用BeautifulSoup来解析HTML并对其进行修改。您可能想要使用decompose()或extract()方法。
BeautifulSoup很不错,因为它非常适合解析格式错误的HTML。
对于您的具体示例:
>>> import bs4
>>> text = """<A href="#106">Item 2. <B>Item 2. Properties</B> this is an example this is an example"""
>>> soup = bs4.BeautifulSoup(text)
>>> soup.b.next_sibling.extract()
u' this is an example this is an example'
>>> soup
<html><body><a href="#106">Item 2. <b>Item 2. Properties</b></a></body></html>
如果您真的想使用正则表达式,那么非贪婪的正则表达式将适用于您的示例:
>>> import re
>>> text = """<A href="#106">Item 2. <B>Item 2. Properties</B> this is an example this is an example"""
>>> m = re.match(".*?Item 2\.", text)
>>> m.group(0)
'<A href="#106">Item 2.'