Python:Regex v.从文本<TYPE>中删除的美丽汤



我需要从标签<TYPE>EX</TEXT>以及<TYPE>XML</TEXT>之间的文本中删除所有部分。我想使用正则表达式如下:

re.sub(r"(?is)<TYPE>EX[^>]*>(.*?)</TEXT>",'',text)

re.sub(r"(?is)<TYPE>XML[^>]*>(.*?)</TEXT>",'',text)

但我继续阅读StackOverflow,如果BeautifulSoup可以完成这项工作,请不要使用regex。如何使用美丽汤删除文本中这些标签之间的内容?我认为这是不正确的:

soup = BeautifulSoup(text.lower())
[s.extract() for s in soup('TYPE')]

我必须指定<TYPE>EX<TYPE>XML.在这两种情况下,结束标记都非常</TEXT>。可以在此处找到示例.txt文件。应该简单地坚持正则表达式吗?

您可以使用正则表达式 (yes) 来匹配包含的文本:

soup.find_all('TYPE', text=re.compile('^s*(?:EX|XML)', re.I))

这将找到所有带有 tagname TYPE 的标签,其直接包含的文本以 EXXML开头(不区分大小写),但允许在开始标签和文本之间留空格。

然后,您可以提取这些标签以将其删除:

for type_tag in soup.find_all('TYPE', text=re.compile('^s*(?:EX|XML)', re.I)):
    type_tag.extract()

我假设您将文档解析为 XML,带有 BeautifulSoup(text, 'xml') ; 否则标签匹配不区分大小写,您需要小写您要查找的标签(例如 find_all('type', ....) )。您需要为 BeautifulSoup 安装lxml以支持 XML 解析。

最新更新