![](/img/trans.png)
[英]How to strip(not remove) specified tags from a html string using Python?
[英]How to remove tags from a string in python using regular expressions? (NOT in HTML)
我需要从python中的字符串中删除标签。
<FNT name="Century Schoolbook" size="22">Title</FNT>
删除两端的整个标记的最有效方法是什么,只留下“标题”? 我只看到过使用HTML标签做到这一点的方法,而这在python中对我没用。 我正在使用这个特别适用于GIS程序ArcMap。 它有自己的布局元素标签,我只需删除两个特定标题文本元素的标签。 我相信正则表达式应该可以正常使用,但我对任何其他建议持开放态度。
这应该工作:
import re
re.sub('<[^>]*>', '', mystring)
对于每个人说正则表达式不是正确的工具:
问题的背景是关于常规/无上下文语言的所有异议都是无效的。 他的语言基本上由三个实体组成: a = <
, b = >
和c = [^><]+
。 他想删除任何acb
。 这直接将他的问题描述为涉及无上下文语法的问题,并且将其定性为常规语法并不困难。
我知道每个人都喜欢“你不能用正则表达式解析HTML”的答案,但是OP不想解析它,他只是想进行简单的转换。
请避免使用正则表达式。 虽然正则表达式可以处理你的简单字符串,但如果你得到一个复杂的字符串,你将来会遇到问题。
您可以使用BeautifulSoup get_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 shell):
>>> 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。 正则表达式不适合这项工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.