如何在python中使用正则表达式去除字符串中的标签?(非HTML)
我需要在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,他只是想进行一个简单的转换。