我需要从标签<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
的标签,其直接包含的文本以 EX
或 XML
开头(不区分大小写),但允许在开始标签和文本之间留空格。
然后,您可以提取这些标签以将其删除:
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 解析。