使用正则表达式从字符串中提取姓名和电子邮件地址

我一直试图通过Java中的正则表达式从以下由多行组成的字符串中提取名称和电子邮件地址:

From: Kane Smith <Kane@smith.com>
To: John Smith <john@smith.com>, Janes Smith
    <jane@smith.org>, Tom Barter <tom@test.co.uk>, Other
    Weird @#$@<>#^Names <other@names.me>, 
    Long Long Long Long Name <longlong@name.com>
Date: Tue, 25 Oct 2011 15:45:59 +0000

我试过这个正则表达式: To:s?(([.*]+)s*<([wd@.]*)>,(s|n)*)+但它没有'工作。

我的意图是提取每个姓名和电子邮件地址,并将每个姓名的电子邮件地址一起分组。 然而,我所做的,似乎只有当有一个单一的名称和地址时才起作用。 我的正则表达式应该怎么做?


    String s = "To: John Smith <john@smith.com>, Janes Smithn"
            + "<jane@smith.org>, Tom Barter <tom@test.co.uk>, Other n"
            + "Weird @#$@<>#^Names <other@names.me>, n"
            + "Long Long Long Long Name <longlong@name.com>";
    s = s.substring(3); // filter TO:
    System.out.println(s);
    // Use DOTALL pattern  
    Pattern p = Pattern.compile("(.*?)<([^>]+)>s*,?",Pattern.DOTALL);

    Matcher m = p.matcher(s);

    while(m.find()) {
        // filter newline
        String name = m.group(1).replaceAll("[nr]+", ""); 
        String email = m.group(2).replaceAll("[nr]+", "");
        System.out.println(name + " -> " + email);
    }

您可以将每行分割为“,”,然后使用javax.mail.internet.InternetAddress。 这将负责提取名称和地址。

顺便说一句,你从哪里得到的标题,为什么他们不能成为关键值,因为他们应该是?

链接地址: http://www.djcxy.com/p/92803.html

上一篇: Extracting Names and Email address from String with regex

下一篇: Absolute positioning within inline elements. Is this behaviour correct?