0

我正在解析传入电子邮件的正文,寻找键/值对。

示例电子邮件
正文 名字:John
姓氏:Smith
电子邮件:john@example.com
评论 = 只是一个
可能跨越多行的测试评论。

我尝试在多行模式下使用 RegEx ([\w\d\s]+)\s?[=|:]\s?(.+)这适用于大多数电子邮件,但当有应该是value一部分的换行符时会失败。我对 RegEx 的了解还不够,无法再进一步。

我有另一个解析器逐行查找键/值对,如果未找到键/值对,只需将一行折叠到最后一个匹配的值中。它是在 Scala 中实现的。

val lines = text.split("\\r?\\n").toList
var lastLabelled: Int = -1
val linesBuffer = mutable.ListBuffer[(String, String)]()

// only parse lines until the first blank line
// null_? method is checks for empty strings and nulls
lines.takeWhile(!_.null_?).foreach(line => {
  line.splitAt(delimiter) match {
    case Nil if line.nonEmpty => {
      val l = linesBuffer(lastLabelled)
      linesBuffer(lastLabelled) = (l._1, l._2 + "\n" + line)
    }
    case pair :: Nil => {
      lastLabelled = linesBuffer.length
      linesBuffer += pair
    }
    case _ => // skip this line
  }
})

我正在尝试使用 RegEx,以便我可以将解析器保存到数据库并在运行时基于每个发送者进行更改(为不同的发送者实现不同的解析器)。

可以修改我的 RegEx 以匹配包含换行符的值吗?我是否需要忘记使用 RegEx 并使用一些 JavaScript?我已经有一个 JavaScript 解析器,它可以让我将 JS 存储在数据库中,并且基本上可以使用 RegEx 解析器完成我想做的所有事情。

4

1 回答 1

1

我认为这应该工作......

((.+?)((\s*)(:|=)(\s*)))(((.|\n)(?!((.+?)(:|=))))+)

...在这里测试http://regexpal.com/。如果您遍历匹配项,您应该能够提取键和值。

于 2013-05-24T19:22:22.103 回答