15

我需要从 python 中的字符串中删除标签。

<FNT name="Century Schoolbook" size="22">Title</FNT>

删除两端的整个标签,只留下“标题”的最有效方法是什么?我只看到了使用 HTML 标记执行此操作的方法,而这在 python 中对我不起作用。我特别将它用于 ArcMap,一个 GIS 程序。它的布局元素有自己的标签,我只需要删除两个特定标题文本元素的标签。我相信正则表达式应该可以很好地解决这个问题,但我愿意接受任何其他建议。

4

6 回答 6

64

这应该有效:

import re
re.sub('<[^>]*>', '', mystring)

每个人都说正则表达式不是这项工作的正确工具:

问题的背景是,所有关于常规/无上下文语言的反对意见都是无效的。他的语言本质上由三个实体组成:a = <b = >c = [^><]+。他想删除任何出现的acb. 这相当直接地将他的问题描述为一个涉及上下文无关语法的问题,并且将其描述为一个常规问题并不难。

我知道每个人都喜欢“你不能用正则表达式解析 HTML”的答案,但是 OP 不想解析它,他只想执行一个简单的转换。

于 2010-09-07T20:07:57.100 回答
5

请避免使用正则表达式。尽管正则表达式可以处理您的简单字符串,但如果您得到一个复杂的字符串,您将来会遇到问题。

您可以使用 BeautifulSoupget_text()功能。

from bs4 import BeautifulSoup

text = '<FNT name="Century Schoolbook" size="22">Title</FNT>'
soup = BeautifulSoup(text)

print(soup.get_text())
于 2015-12-30T18:18:47.197 回答
3

搜索此正则表达式并将其替换为空字符串应该可以。

/<[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
于 2010-09-07T20:10:44.993 回答
1

如果它只是用于解析和检索值,你可以看看 BeautifulStoneSoup。

于 2010-09-07T20:04:06.757 回答
1

如果源文本是格式正确的 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 是一个不错的建议。正如几位发帖人指出的那样,使用正则表达式来解析标签并不是一个好主意。

于 2010-09-07T20:59:18.467 回答
-3

使用 XML 解析器,例如 ElementTree。正则表达式不是这项工作的正确工具。

于 2010-09-07T21:00:38.603 回答