Извлечение имен и адресов электронной почты из строки с помощью регулярного выражения - PullRequest
2 голосов
/ 26 октября 2011

Я пытался извлечь имена и адреса электронной почты из следующей строки, которая состоит из нескольких строк через регулярное выражение в 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*<([\w\d@\.]*)>,(\s|\n)*)+ Но это не работает.

Мое намерение состоит в том, чтобы извлечь каждое из имен и адресов электронной почты и объединить каждое имя и его адрес электронной почты в группы. Однако то, что я сделал, похоже, работает только при наличии одного имени и адреса. Что должно быть моим регулярным выражением, чтобы сделать это?

Ответы [ 2 ]

3 голосов
/ 26 октября 2011
    String s = "To: John Smith <john@smith.com>, Janes Smith\n"
            + "<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("[\\n\\r]+", ""); 
        String email = m.group(2).replaceAll("[\\n\\r]+", "");
        System.out.println(name + " -> " + email);
    }
1 голос
/ 26 октября 2011

Вы можете разделить каждую строку на ",", а затем использовать javax.mail.internet.InternetAddress. Это позаботится о извлечении имени и адреса.

Кстати, откуда вы берете заголовки и почему они не могут быть ключевыми значениями, какими они должны быть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...