【问题标题】:Match selected formatting from html to plain text匹配从 html 到纯文本的选定格式
【发布时间】:2014-12-16 05:04:56
【问题描述】:

我正在使用 Mailgun 的出色 Inbound Routing 来解析我收到的电子邮件,删除 HTML 和电子邮件签名,这让我得到了原始的文本正文。

下面是返回的一个小例子:

{
  "stripped-html": "<html><body><div style=\"font-family: Helvetica; font-size: 13px;\">Testing with <b>bold<\/b>&#160;and <u>stuff<\/u><br><\/div><div style=\"font-family: Helvetica; font-size: 13px;\"><u><br><\/u><\/div><div style=\"font-family: Helvetica; font-size: 13px;\">:)<\/div>&#13;\n                <div><div><br><\/div><div>--&#160;<\/div><div>Tim Smith<\/div><div><br><\/div><\/div>&#13;\n                 &#13;\n                <p style=\"color: #A0A0A8;\"><\/p>&#13;\n                <div>&#13;\n                    <br><\/div><\/body><\/html>",
  "stripped-text": "Testing with bold and stuff\n\n:)",
  "stripped-signature": "-- \nTim Smith"
}

我想要做的是采用简单的stripped-text,但也复制基本格式,如粗体、斜体和下划线。在这个例子中,单词“bold”是bold,而世界“stuff”带有下划线。

解决这个问题的最佳方法是什么?

【问题讨论】:

  • 你最好解析 HTML 而不是剥离的文本,因为剥离的文本没有关于应该或可以格式化什么的信息。

标签: regex email parsing mailgun


【解决方案1】:

我会采用“stripped-html”字符串并对其进行清理,这样您就可以摆脱转义字符串...

...那么你可以做两件事:

  1. 运行与样式匹配的正则表达式并忽略所有其他内容。 尽管后两者自 HTML4 以来已被弃用,并被替换为粗体和 css 样式属性(字体样式:斜体)。 例如: 首先,您将外部 html 与(&lt;\w* \w*=".*?"&gt;)(.*)(&lt;\/\w*&gt;) 匹配 然后递归查找粗体和其他元素,例如 &lt;b&gt;(.*?)&lt;/b&gt; 用于没有其他属性的 b 标记。

一旦将所有 b 标签替换为粗体,您就可以直接转到下一个标签。

  1. 使用解析器 - 例如,如果您想使用 PHP,http://simplehtmldom.sourceforge.net/ 可能是一个好的开始。

【讨论】:

  • 如果您对我投反对票,请告诉我为什么会这样,这样我可以对其进行编辑并使其变得更好吗?谢谢!
猜你喜欢
  • 2023-03-06
  • 2014-02-28
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 2017-07-04
  • 1970-01-01
相关资源
最近更新 更多