首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析"quoted-printable“编码文本

解析"quoted-printable“编码文本
EN

Stack Overflow用户
提问于 2017-08-23 22:45:01
回答 2查看 403关注 0票数 0

我有一些用quoted-printable编码的文本,其中使用=符号进行软中断。我希望解析(而不是解码)这个文本。有没有什么方法可以让我读到下面的内容,

代码语言:javascript
复制
<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

如下所示:

代码语言:javascript
复制
8/23/2017-        Lorem ipsum dolor sit amet, fastidii sad.Vim graece    tractatos
EN

回答 2

Stack Overflow用户

发布于 2017-08-23 22:57:19

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

代码语言:javascript
复制
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)

但既然你要求解析它。您想要检索什么?解析通常意味着您将提取结构化数据,因此您的输入应该符合某些语法(看起来是这样):

  • 第一个字段是日期(采用某种格式)
  • 第二个字段a message
  • 第三个字段(看起来像是第三个字段):category

编辑:

最简单的形式:

代码语言:javascript
复制
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))
票数 1
EN

Stack Overflow用户

发布于 2017-08-27 00:08:03

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

代码语言:javascript
复制
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

使用剥离器转换您的输入字符串:

代码语言:javascript
复制
stripped = stripper.transformString(sample)
print(stripped)

打印

代码语言:javascript
复制
8/23/2017-  Lorem ipsum dolor sit amet, fastidii sad.Vim graece  tractatos
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45842921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档