正则表达式电子邮件和日期

时间:2013-08-21 14:33:40

标签: regex

我有一个用于在文本文件中工作的电子邮件数据转储 我希望使用正则表达式提取电子邮件的内容。

目前我正在尝试从数据中删除原始请求者 电子邮件的原始创建者将始终有一个时间戳与他们的名字,但任何cc'd的人不会

本质上它的电子邮件看起来像这样

John Smith(XYZ RE)(M / DD / YYYY HH:MM PM):

John Smith(XYZ RE)的电子邮件格式将再次出现在电子邮件的下方,与不同的人

我已经创建了这个不优雅的正则表达式来获取电子邮件(它的工作方式非常开心,并且我理解它更重要)

([^\s]+\s+[^\s]+\s+[(]+[A-Z]+\s+[A-Z]+[)])

我也尝试了类似的东西来检索日期,但是这适用于某些日期并且与其他日期一起落下

([^\s][0-9]+[/]+[0-9]+[/]+[0-9]+\s+[0-9][:][0-9]+\s+(AM|PM)[)][:])

有人可以帮忙吗?

我是Regex的新手,如果你有时间的话,也会很感激 我使用Notepad ++来测试它,然后使用基于java的应用程序来运行它

由于 约翰

3 个答案:

答案 0 :(得分:3)

您不需要所有这些方括号,使用字符类就足够了。

对于日期/时间正则表达式,请使用以下内容:

'\(\d+\/\d+\/\d+\s\d+:\d+ (AM|PM)\):'

\d类似于[0-9] - 更短:)

请注意,您需要转义括号,否则它们将成为正则表达式的一部分,这将意味着组捕获。

使用括号()包围的正则表达式中的某些内容将意味着这些括号中匹配的任何内容都将被“捕获”(存储在变量中供以后使用)。如果您正在使用大型文本,并且不需要访问匹配的字符串(例如,仅替换或某些内容),那么您可以通过在括号中添加?:来避免捕获,如下所示:

'\(\d+\/\d+\/\d+\s\d+:\d+ (?:AM|PM)\):'
                           ^^

这不会将匹配的字母AMPM存储在变量中,这意味着对于大型文本的性能稍好一些:)

答案 1 :(得分:1)

您只是错过了一个+,看起来它会将您的匹配限制为具有一位数小时字段的日期。

([^\s][0-9]+[/]+[0-9]+[/]+[0-9]+\s+[0-9]+[:][0-9]+\s+(AM|PM)[)][:])
                                        ^

您可以将[^\s]替换为\S,将[0-9]替换为\d来简化您的正则表达式,但由于这听起来像是一次性使用协议,无论您发现什么更容易阅读可能更合适。这些替换都不是必需的,它们只是捷径。

(此外,您可以将(AM|PM)替换为[AP]M而不是捕获“AM”,而{{1}}与A或P匹配,后跟M而不捕获组。)< / p>

答案 2 :(得分:0)

对于您的约会,请尝试使用此: /^(1[0-2]|0[1-9])\/(3[01]|[12][0-9]|0[1-9])\/[0-9]{4} ([0-2][0-9]\:[0-5][0-9]) (AM|PM)$/