我正在努力想出一个从下面的字符串中提取子字符串的好方法。
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,但这对我没有帮助。有什么建议吗?
答案 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
模式后,您可以使用插入符 ^ 来匹配每行的开头。
字符集[ ._/-]
允许您匹配任何日期分隔符。