我有一些用quoted-printable编码的文本,其中使用=
符号进行软分解。我正在寻找解析(不解码)这个文本。有什么方法可以阅读以下内容,
<span style=3D"text-decoration: line-through; color: rgb(156, 163, 173);">8=
/23/2017- Lorem ipsum dolor sit amet, fastidii sad.Vim graece&nb=
sp; tractatos
这样:
8/23/2017- Lorem ipsum dolor sit amet, fastidii sad.Vim graece tractatos
答案 0 :(得分:0)
似乎这对re
模块应该足够简单(这是未经测试的,并且来自内存:
import re
test_str = """<span style=3D"text-decoration: line-through; color: rgb(156, 163, 173);">8=
/23/2017- Lorem ipsum dolor sit amet, fastidii sad.Vim graece&nb=
sp; tractatos"""
re.sub(r'=$', r'\n', test_str, flags=re.MULTILINE)
但是因为你要求解析它。你想要检索什么?解析通常意味着您将提取结构化数据,因此您的输入应该根据某些语法(似乎是这样):
编辑:
最简单的形式:
import quopri
from HTMLParser import HTMLParser
test_str = """<span style=3D"text-decoration: line-through; color: rgb(156, 163, 173);">8=
/23/2017- Lorem ipsum dolor sit amet, fastidii sad.Vim graece&nb=
sp; tractatos"""
h = HTMLParser()
print h.unescape(quopri.decodestring(test_str))
答案 1 :(得分:0)
解析器可能对这个问题有点过分,但是pyparsing是一个简单的解析库来处理一些棘手的规则。此外,它还附带了一些内置的HTML标记表达式:
import pyparsing as pp
sample = """\
<span style=3D"text-decoration: line-through; color: rgb(156, 163, 173);">8=
/23/2017- Lorem ipsum dolor sit amet, fastidii sad.Vim graece&nb=
sp; tractatos"""
# strip all trailing '='
sample = sample.replace("=\n", "")
# convert =XX to char(int(XX)), like =3D -> '='
hex_escape = pp.Regex(r'=[0-9a-fA-F]{2}')
hex_escape.setParseAction(lambda t: chr(int(t[0][1:], 16)))
sample = hex_escape.transformString(sample)
# convert HTML entities like and suppress all opening and closing HTML tags
pp.commonHTMLEntity.setParseAction(pp.replaceHTMLEntity)
stripper = pp.anyOpenTag.suppress() | pp.anyCloseTag.suppress() | pp.commonHTMLEntity
使用剥离器转换输入字符串:
stripped = stripper.transformString(sample)
print(stripped)
打印
8/23/2017- Lorem ipsum dolor sit amet, fastidii sad.Vim graece tractatos