Python 解析";引述“可打印”;编码文

Python 解析";引述“可打印”;编码文,python,parsing,quoted-printable,Python,Parsing,Quoted Printable,我有一些文本编码为带引号的printable,其中软中断是用=符号进行的。我希望解析(而不是解码)这段文字。我有没有办法读懂下面的内容 <span style=3D"text-decoration: line-through; color: rgb(156, 163, 173);">8= /23/2017-&nbsp;&nbsp;Lorem ipsum dolor sit amet, fastidii sad.Vim graece&nb= sp; tracta

我有一些文本编码为带引号的printable,其中软中断是用
=
符号进行的。我希望解析(而不是解码)这段文字。我有没有办法读懂下面的内容

<span style=3D"text-decoration: line-through; color: rgb(156, 163, 173);">8=
/23/2017-&nbsp;&nbsp;Lorem ipsum dolor sit amet, fastidii sad.Vim graece&nb=
sp; tractatos

似乎使用
re
模块应该足够简单(这是未测试的,来自内存:

import re

test_str = """<span style=3D"text-decoration: line-through; color: rgb(156, 163, 173);">8=
/23/2017-&nbsp;&nbsp;Lorem ipsum dolor sit amet, fastidii sad.Vim graece&nb=
sp; tractatos"""

re.sub(r'=$', r'\n', test_str, flags=re.MULTILINE)
重新导入
测试_str=“”8=
/2017年3月23日-洛雷姆·伊普苏姆·多洛尔·塞特、法斯蒂迪·萨德、维姆·格雷斯和nb=
拖拉机
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-&nbsp;&nbsp;Lorem ipsum dolor sit amet, fastidii sad.Vim graece&nb=
sp; tractatos"""

h = HTMLParser()
print h.unescape(quopri.decodestring(test_str))
导入quopri
从HTMLPasser导入HTMLPasser
测试_str=“”8=
/2017年3月23日-洛雷姆·伊普苏姆·多洛尔·塞特、法斯蒂迪·萨德、维姆·格雷斯和nb=
拖拉机
h=HTMLParser()
打印h.unescape(qoopri.decodestring(test_str))

对于这个问题,解析器可能有些过火,但pyparsing是一个简单的解析库,可以处理一些更复杂的规则。此外,它还附带一些内置的HTML标记表达式:

import pyparsing as pp

sample = """\
<span style=3D"text-decoration: line-through; color: rgb(156, 163, 173);">8=
/23/2017-&nbsp;&nbsp;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 &nbsp; and suppress all opening and closing HTML tags
pp.commonHTMLEntity.setParseAction(pp.replaceHTMLEntity)
stripper = pp.anyOpenTag.suppress() | pp.anyCloseTag.suppress() | pp.commonHTMLEntity
印刷品

8/23/2017-  Lorem ipsum dolor sit amet, fastidii sad.Vim graece  tractatos
stripped = stripper.transformString(sample)
print(stripped)
8/23/2017-  Lorem ipsum dolor sit amet, fastidii sad.Vim graece  tractatos