从单个字符串中提取传真号码或电话?

时间:2016-12-01 06:30:50

标签: java android

在扫描文本格式后,在android上的OCR项目上工作 在一个条件中超出字符串是

Tel:+91 345677890 Fax: +91 80 222767000

需要仅提取电话号码和传真号码。

在第二个例子中

xyaz@mail.com ,Fax:+91 80 222767000

我需要将传真,电话和电子邮件分成变量

这是否但无法找到解决方案

String cellfound="Tel:+91 345677890 Fax: +91 80 222767000 xyaz@mail.com";
Pattern cellp1= Pattern.compile(".*\\b(Mobile|M|M )\\b.*",Pattern.CASE_INSENSITIVE);
Matcher cellm1 = cellp1.matcher(cellnumber);
if (cellm1.matches()) {
    cellfound=cellm1.group();
    System.out.println("\nbefore cell found "+cellfound);
    cellfound=cellfound.replaceAll("[^0-9]", " ");
    System.out.println("\nfinal cell found from pattern :"+cellfound);
}

2 个答案:

答案 0 :(得分:1)

这对你有用:

public static void main(String[] args) throws Exception {
    String s ="Tel:+91 345677890 Fax: +91 80 222767000";
    String[] arr = s.split("[a-zA-Z:]+\\s*");
    for (String str : arr){
        System.out.println(str);
    }

    String s2 = "xyaz@mail.com ,Fax:+91 80 222767000";
    arr = s2.split(",\\w+:");
    for (String str : arr){
        System.out.println(str);
    }
}

O / P:

<empty String here> // ignore this value
+91 345677890 
+91 80 222767000
xyaz@mail.com 
+91 80 222767000

答案 1 :(得分:0)

你可以试试这个:

(?<=Tel[:\\s])([+\\d\\s]+\\S)(?=\\s\\D)|(?<=Fax[:\\s])([+\\d\\s]+\\S)(?=\\s\\D)|(?<=\\s)(\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b)

说明:

(?<=Tel[:\\s])([+\\d\\s]+\\S)(?=\\s\\D)匹配数字空格组,前面是“Tel:” - &gt;这会捕获电话号码。

(?<=Fax[:\\s])([+\\d\\s]+\\S)(?=\\s\\D)匹配数字空格组,其前面是“Fax:” - &gt;这会捕获传真号码

最后一个(?<=\\s)(\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b)是一个以空格开头的电子邮件正则表达式。

如您所见, Tel Fax 具有几乎相同的正则表达式。我们可以将它组合成一个,但我想将它分开以获得更清晰的结果。

以下是示例代码:

import java.util.regex.*;

public class HelloWorld {
    public static void main(String []args){
        String test = "Tel:+91 345677890 Fax: +91 80 222767000 xyaz@mail.com";

        String regex = "(?<=Tel[:\\s])([+\\d\\s]+\\S)(?=\\s\\D)|" // this captures the tel number
                + "(?<=Fax[:\\s])([+\\d\\s]+\\S)(?=\\s\\D)|" // this captures the fax number
                + "(?<=\\s)(\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b)"; // this captures the email string

        // Remember the CASE_INSENSITIVE option
        Pattern re = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

        Matcher m = re.matcher(test);
        while (m.find()) {
            System.out.println(m.group(0).trim());
        }
     }
}

预期结果如下:

+91 345677890                                                                                                                                                                                                                     
+91 80 222767000                                                                                                                                                                                                                  
xyaz@mail.com