如何在python中使用正则表达式去除字符串中的标签?(非HTML)

15 投票
6 回答
31337 浏览
提问于 2025-04-16 03:49

我需要在Python中从一个字符串中去掉标签。

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

有什么最有效的方法可以去掉两端的整个标签,只留下“标题”?我只见过用HTML标签来处理这个问题,但在Python中对我来说并不奏效。我特别是在使用ArcMap,一个地理信息系统(GIS)程序。它有自己用于布局元素的标签,我只需要去掉两个特定标题文本元素的标签。我觉得正则表达式应该可以解决这个问题,但我也愿意听听其他建议。

6 个回答

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
6

请尽量不要使用正则表达式。虽然正则表达式在处理简单字符串时能奏效,但如果将来遇到复杂的字符串,你可能会遇到麻烦。

你可以使用BeautifulSoup的get_text()功能。

from bs4 import BeautifulSoup

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

print(soup.get_text())
66

这个方法应该可以用:

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

对于那些说正则表达式不适合这个工作的朋友:

这个问题的背景是,关于正则表达式和上下文无关语言的所有反对意见在这里都不成立。他的语言基本上由三个部分组成:a = <b = >c = [^><]+。他想要去掉任何出现的 acb。这实际上把他的问题归类为一个涉及上下文无关文法的问题,而且把它归类为正则文法也并不难。

我知道大家都喜欢“你不能用正则表达式解析HTML”的说法,但提问者并不想解析HTML,他只是想进行一个简单的转换。

撰写回答