我需要从 python 中的字符串中删除标签。
<FNT name="Century Schoolbook" size="22">Title</FNT>
删除两端的整个标签,只留下“标题”的最有效方法是什么?我只看到了使用 HTML 标记执行此操作的方法,而这在 python 中对我不起作用。我特别将它用于 ArcMap,一个 GIS 程序。它的布局元素有自己的标签,我只需要删除两个特定标题文本元素的标签。我相信正则表达式应该可以很好地解决这个问题,但我愿意接受任何其他建议。
这应该有效:
import re
re.sub('<[^>]*>', '', mystring)
每个人都说正则表达式不是这项工作的正确工具:
问题的背景是,所有关于常规/无上下文语言的反对意见都是无效的。他的语言本质上由三个实体组成:a = <
、b = >
和c = [^><]+
。他想删除任何出现的acb
. 这相当直接地将他的问题描述为一个涉及上下文无关语法的问题,并且将其描述为一个常规问题并不难。
我知道每个人都喜欢“你不能用正则表达式解析 HTML”的答案,但是 OP 不想解析它,他只想执行一个简单的转换。
请避免使用正则表达式。尽管正则表达式可以处理您的简单字符串,但如果您得到一个复杂的字符串,您将来会遇到问题。
您可以使用 BeautifulSoupget_text()
功能。
from bs4 import BeautifulSoup
text = '<FNT name="Century Schoolbook" size="22">Title</FNT>'
soup = BeautifulSoup(text)
print(soup.get_text())
搜索此正则表达式并将其替换为空字符串应该可以。
/<[A-Za-z\/][^>]*>/
示例(来自 python 外壳):
>>> import re
>>> my_string = '<FNT name="Century Schoolbook" size="22">Title</FNT>'
>>> print re.sub('<[A-Za-z\/][^>]*>', '', my_string)
Title
如果它只是用于解析和检索值,你可以看看 BeautifulStoneSoup。
如果源文本是格式正确的 XML,则可以使用 stdlib 模块ElementTree:
import xml.etree.ElementTree as ET
mystring = """<FNT name="Century Schoolbook" size="22">Title</FNT>"""
element = ET.XML(mystring)
print element.text # 'Title'
如果源文件格式不正确,BeautifulSoup 是一个不错的建议。正如几位发帖人指出的那样,使用正则表达式来解析标签并不是一个好主意。
使用 XML 解析器,例如 ElementTree。正则表达式不是这项工作的正确工具。