如何从此字符串中提取电子邮件地址

时间:2017-04-12 16:19:54

标签: java regex

例如,我有这个字符串,其中电子邮件地址格式不同:

"a.b@c.d" <a.b@c.d>|"Michal pichal (michal.pichal@g.d)" <michal.pichal@g.d>|Melisko Pan <melisko.pan@domena.sk>

我需要以以下形式提取电子邮件地址:

a.b@c.d|michal.pichal@g.d|melisko.pan@domena.sk

我的想法是从群组[0-9] [A-Z] [a-z] @ .-获取@附近的任何字符,但我不知道如何。请帮忙一些提示。

2 个答案:

答案 0 :(得分:0)

import java.util.Scanner;
class test{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String res = ""; //This holds the final result
        for(int i=0; i<str.length(); ++i){ //Loop through the entire string
            if(str.charAt(i)=='<'){
                String build = "";
                for(int j=i+1; j<str.length(); ++j){
                    if(str.charAt(j)=='>'){
                        break; //Break when we hit the '>'
                    }
                    build += str.charAt(j); //Add those between < and >
                }
                res += build + "|"; //Add the pipe at the end
            }
            continue;
        }
        System.out.println(res);
    }
}

这应该这样做。 只需运行简单的嵌套循环。不需要正则表达式。

答案 1 :(得分:0)

此正则表达式从字符串中提取电子邮件:

public static void main(String[] args) {
        Pattern pattern = Pattern.compile("[\\w.]+@[\\w.]+");
        Matcher matcher = pattern.matcher("\"a.b@c.d\" <a.b@c.d>|\"Michal pichal (michal.pichal@g.d)\" <michal.pichal@g.d>|Melisko Pan <melisko.pan@domena.sk>\r\n");
        while(matcher.find()){
            String group = matcher.group();
            System.out.println("group="+group);
        }

打印:

group=a.b@c.d
group=a.b@c.d
group=michal.pichal@g.d
group=michal.pichal@g.d
group=melisko.pan@domena.sk