繁体   English   中英

Python:要从文本中删除的Regex v.BeautifulSoup <TYPE>

[英]Python: Regex v. BeautifulSoup to remove from text <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 如何使用BeautifulSoup删除文本中这些标签之间的内容? 我认为这是不正确的:

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

我必须指定<TYPE>EX<TYPE>XML 在两种情况下,结束标记实际上都是</TEXT> 可以在此处找到示例.txt文件。 是否应该坚持使用正则表达式?

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM