使用多个Java正则表达式

时间:2012-08-07 16:20:36

标签: java regex string parsing

我正在尝试提取电子邮件,并使用模式(EMAIL_PATTERN)将其替换为空格。运行以下内容时,传入完整文档时不会生成任何输出。该模式仅匹配整个区域。所以这意味着如果我们只传入电子邮件,电子邮件将被匹配并被替换为空格。但是,以下方法的目的是找到电子邮件,并且不需要以前的手动提取。在替换tempString中的电子邮件之后,我想将它用于下一个模式。我应该在一种方法中组合我想要使用的模式,还是应该将它们放在不同的方法中?下面是我现在的代码。我也有其他模式,但由于我的方法工作不正常,我还没有发布它们。

private static final String EMAIL_PATTERN = "[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})";
public static void main (String[] args) {
//Document takes in a ID, student information(which includes email, address, phone, name),   school, and text   
Document r = new Document("", "FirstName LastName, Address, example@email.com,    phoneNumber", "School", "experience", "text");
            personalEmailZone(r);

 }
public static Document personalEmailZone(Document doc){
    //tempString is the personal information section of a resume
    String tempPI = doc.tempString();
    if(doc.tempString().matches(EMAIL_PATTERN) == true){
        //Pattern pattern = Pattern.compile("");
        Pattern pattern = Pattern.compile(EMAIL_PATTERN);
        Matcher matcher = pattern.matcher(tempPI);
        String emailTemp = "";
        if(matcher.find()){
            emailTemp = matcher.group();
            System.out.println(emailTemp);
            //PI.replace(emailTemp, "");
            System.out.println(emailTemp.replace(emailTemp, ""));
            tempPI = tempPI.replace(emailTemp, "");
            System.out.println(tempPI);
        }
    }
    return doc;
}

2 个答案:

答案 0 :(得分:0)

您可以将模式放在不同的方法中,这些方法返回修改后的字符串以用于文本模式用法。例如

String tempPI = doc.tempString();
tempPI = applyPattern1(tempPI);
tempPI = applyPattern2(tempPI)
tempPI = applyPattern3(tempPI);

由于doc.tempString().matches(EMAIL_PATTERN) == true,您的代码不会显示任何输出。也许它不需要,因为它希望整个字符串都是一封电子邮件。

答案 1 :(得分:0)

你有几个问题:

public static Document personalEmailZone(Document doc){
    //tempString is the personal information section of a resume
    String tempPI = doc.tempString();
    if(doc.tempString().matches(EMAIL_PATTERN) == true){

上述语句尝试将整个文档与电子邮件地址模式进行匹配。除非doc.tempString()仅包含一个电子邮件地址,否则不会匹配。

        //Pattern pattern = Pattern.compile("");
        Pattern pattern = Pattern.compile(EMAIL_PATTERN);
        Matcher matcher = pattern.matcher(tempPI);
        String emailTemp = "";
        if(matcher.find()){
            emailTemp = matcher.group();
            System.out.println(emailTemp);
            //PI.replace(emailTemp, "");
            System.out.println(emailTemp.replace(emailTemp, ""));

不确定上述内容是什么。如果你的代码到了这一点,它将始终打印一个空行。

            tempPI = tempPI.replace(emailTemp, "");
            System.out.println(tempPI);
        }

由于没有循环,您将只替换第一次出现的电子邮件地址。如果您希望替换所有出现的事件,则需要循环输入。

    }
    return doc;

此时您尚未实际修改doc,因此您将以原始格式返回文档,并附上电子邮件地址。

}

查看String#replaceAll(String regex, String replacement)

的Javadoc