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