2010-09-07 29 views
11

我需要从Python中的字符串中删除标签。如何使用正则表达式从Python中的字符串中删除标签? (不在HTML中)

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

什么是最有效的方式来删除两端的整个标签,只留下“标题”?我只看到了用HTML标签做这件事的方法,这在Python中并不适合我。我特别用这个GIS程序ArcMap。它有自己的布局元素标签,我只需要删除两个特定标题文本元素的标签。我相信正则表达式应该可以正常工作,但我愿意接受任何其他建议。

+0

做你想做标题是标题完成后,或标题或<>标题<>或? ,不确定你的问题是什么? – Doon 2010-09-07 19:51:30

+0

那么处理后该字符串应该是什么样子?我不完全清楚你想做什么。 – 2010-09-07 19:51:53

+2

对不起。处理后字符串应该是“标题”。 – 2010-09-07 19:52:56

回答

48

这应该工作:

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

对大家说,正则表达式是不适合工作的正确工具:

问题的背景是这样的,所有的反对关于定期/上下文免费语言无效。他的语言基本上由三个实体组成:a = <,b = >c = [^><]+。他想要删除任何发生的acb。这相当直接地将他的问题描述为涉及上下文无关语法的问题,并且将其定性为常规语法并不困难。

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

+0

这没有奏效。它返回了原始字符串。谢谢 – 2010-09-07 20:25:46

+0

对不起,我忘记了所有重要的'*'字符。再试一次? – Domenic 2010-09-07 20:43:55

+0

它工作!谢谢。这就是我需要的。 – 2010-09-07 22:03:55

2

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

3

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

/<[A-Za-z\/][^>]*>/ 

(从蟒壳)实施例:

>>> import re 
>>> my_string = '<FNT name="Century Schoolbook" size="22">Title</FNT>' 
>>> print re.sub('<[A-Za-z\/][^>]*>', '', my_string) 
Title 
+0

那也没用。你能给我一个你如何使用这个搜索和替换的例子吗?我试过了,它返回了原始字符串。 – 2010-09-07 20:46:41

+0

添加了一个示例。你忘了进口吗? – 2010-09-07 21:32:56

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' 

如果源ISN没有良好的结构,BeautifulSoup是一个很好的建议。正如几位海报人员指出的那样,使用正则表达式解析标签并不是一个好主意。

+0

如果FNT在“标题”中间会包含另一个标签,则只打印内部标签之前的部分。 – vvondra 2014-02-07 10:18:50

-2

使用XML解析器,如ElementTree。正则表达式不适合这份工作。

+0

除非输入不能保证是格式良好的XML,在这种情况下,正则表达式可以说是工作中唯一合理的工具。我也愿意打赌,正则表达式的处理速度要比处理字符串作为XML文档快得多。 – 2010-09-07 21:41:52

+2

如果输入不是格式良好的XML,那么实现完整的解析器将是正确的方法。语法很复杂,正则表达式不够。 – 2010-09-08 00:43:59

2

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

您可以使用BeautifulSoup get_text()功能。

from bs4 import BeautifulSoup 

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

print(soup.get_text()) 
相关问题