我一直在尝试从以下字符串中提取名称和电子邮件地址,该字符串由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)*)+
但它不起作用。
我的目的是提取每个名称和电子邮件地址,并将每个名称的电子邮件地址放在一起。然而,我所做的只有在有一个单一的名称和地址时才能起作用。我的正则表达式应该做什么?
答案 0 :(得分:3)
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 :(得分:1)
您可以在“,”上拆分每一行,然后使用javax.mail.internet.InternetAddress。这将负责提取名称和地址。
顺便说一下,你从哪里得到标题,为什么它们不能成为关键值呢?