Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用正则表达式解析文本文件中包含的电子邮件?_Java_Regex - Fatal编程技术网

Java 如何使用正则表达式解析文本文件中包含的电子邮件?

Java 如何使用正则表达式解析文本文件中包含的电子邮件?,java,regex,Java,Regex,我有一个文本文件,包含上述电子邮件中的文本。 我需要提取E2、E1、E0的值以及From:、Sent:、to:、Subject:的每个值: 我们能用正则表达式吗 我们可以在java中使用“^(从| Sent |到| Subject):(.*)”正则表达式。 但是,对于上面的文本示例,是否有任何全面的正则表达式?请查看原始消息源。您将看到,应该有一个统一的第一个标题,并且始终只有一个空行将标题与实际消息(您想要的部分)分隔开 您可以创建一个正则表达式来查找第一个标题后的第一个空行,然后提取正文。不

我有一个文本文件,包含上述电子邮件中的文本。 我需要提取E2、E1、E0的值以及From:、Sent:、to:、Subject:的每个值: 我们能用正则表达式吗

我们可以在java中使用“^(从| Sent |到| Subject):(.*)”正则表达式。
但是,对于上面的文本示例,是否有任何全面的正则表达式?

请查看原始消息源。您将看到,应该有一个统一的第一个标题,并且始终只有一个空行将标题与实际消息(您想要的部分)分隔开


您可以创建一个正则表达式来查找第一个标题后的第一个空行,然后提取正文。

不确定是否相关,但有些邮件阅读器(thunderbird等)将邮件存储在一个文本文件中,并使用确定的格式:

  • 分隔行以
    From
    开头(即From后面跟一个空格而不是一列):这一行是邮件的开头
  • 分隔符后面是标题行。每个标题行的格式为: 头名:价值 其中HEADERNAME和value都是任意字符串。规则是HEADERNAME前面不能有空格,因为以空格开头的行是连续行
  • headers组以空行终止
  • 从行到下一行的剩余
    是邮件的正文
如果您正在阅读这样的文件,我强烈建议您不要依赖已知的HeaderNames,而是根据上述规则解析文件,或者更好地使用
邮箱
模块来为您完成此操作,并且:

  • 已经过彻底的测试
  • 有许多选项以适应邮箱格式的变化

你建议的正则表达式有什么问题?它不会一下子就起作用。请看有一个模式,首先我们将标题从发送到主题,然后是区域,然后重复。E2、E1、E0的位置可能有大段落,这很好,因为你只在第一个空行之后进行解析。另一种方法是只解析标题,然后剩下的就是你的内容。标题和内容之间会有新行,所以逻辑应该基于空行。这就是我在原始答案中所说的。