需要正则表达式来提取子字符串

时间:2014-06-26 07:14:04

标签: java regex jsp

我正在努力想出一个从下面的字符串中提取子字符串的好方法。

Inputs: 

Invoice 1800000173 of 06/18/2014/150 USD Discnt to 07/02/2014

Invoice 1200000000 of 02.04.2014/150 Details

以上是两种可能的组合。

Expected Output:

Invoice 1800000173 of 06/18/2014

Invoice 1200000000 of 02.04.2014

这里有一个类似的问题 - Regex to get date from string,但这对我没有帮助。有什么建议吗?

6 个答案:

答案 0 :(得分:2)

"Invoice (\d+) of (\d\d[./]\d\d[./]\d{4})"

两个捕获组,第一个是发票号码的一个或多个数字,第二个是日期部分。逃避反斜杠也需要适当地完成。

答案 1 :(得分:0)

试试这个

([0-9]+) of ([0-9]{1,2}[,/][0-9]{1,2}[,/][0-9]{1,4})

第一组包含发票编号和第二个日期。

答案 2 :(得分:0)

你可以试试这个:

Invoice [0-9]+ of ([0-9]{2}[\/.][0-9]{2}[\/.][0-9]{4})

答案 3 :(得分:0)

正则表达式将满足您的需求,

Invoice\\s\\d+\\sof\\s\\d+[/.]\\d+[/.]+\\d+

使用模式匹配器获取所需的子字符串.. As,

public class StringProcesing {

    public void fetchSubString() {
        String s1 = "Invoice 1800000173 of 06/18/2014/150 USD Discnt to 07/02/2014";
        String s2 = "Invoice 1200000000 of 02.04.2014/150 Details";

        Pattern p = Pattern
                .compile("Invoice\\s\\d+\\sof\\s\\d+[/.]\\d+[/.]+\\d+");
        Matcher matchS1 = p.matcher(s1);
        while(matchS1.find()) {
            System.out.println(matchS1.group());
        }
        Matcher matchS2 = p.matcher(s2);
        while(matchS2.find()) {
            System.out.println(matchS2.group());
        }
    }

    public static void main(String[] args) {
        StringProcesing obj = new StringProcesing();
        obj.fetchSubString();
    }
}

<强>输出:

Invoice 1800000173 of 06/18/2014
Invoice 1200000000 of 02.04.2014

答案 4 :(得分:0)

您可以使用String#replaceFirst捕捉您想要的内容并放弃休息:

String str = "Invoice 1800000173 of 06/18/2014/150 USD Discnt to 07/02/2014";
String m = str.replaceFirst("^.*(Invoice +\\d+ +of +\\d{2}[./]\\d{2}[./]\\d{4}).*$", "$1");
//=> Invoice 1800000173 of 06/18/2014

str = "Invoice 1200000000 of 02.04.2014/150 Details";
m = str.replaceFirst("^.*(Invoice +\\d+ +of +\\d{2}[./]\\d{2}[./]\\d{4}).*$", "$1");
//=> Invoice 1200000000 of 02.04.2014

答案 5 :(得分:0)

我有很好的解决方案:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexFun {
    public static void main(String[] args) {
        String input = "Inputs: \r\n" + "\r\n" + "Invoice 1800000173 of 06/18/2014/150 USD Discnt to 07/02/2014\r\n"
                + "\r\n" + "Invoice 1200000000 of 02.04.2014/150 Details";
        Pattern emailPattern = Pattern.compile("^Invoice \\d{10} of \\d{1,2}[ ._/-]\\d{1,2}[ ._/-]\\d{2,4}",
                Pattern.MULTILINE);
        Matcher matcher = emailPattern.matcher(input);
        while (matcher.find()) {
            String group = matcher.group();
            System.out.println("group=" + group);
        }
    }
}

启用MULTILINE模式后,您可以使用插入符 ^ 来匹配每行的开头。

字符集[ ._/-]允许您匹配任何日期分隔符。