我需要正则表达式从下面的字符串中提取记录号,
String extract = "Purchase Order HDL/17-04-2013/PRO_1311 is saved successfully"
输出:
HDL/17-04-2013/PRO_1311
我尝试使用谷歌搜索,但无法得到结果。请建议。
答案 0 :(得分:0)
类似的东西:
"Purchase Order ([A-Z]+/\d{2}-\d{2}-\d{4}/[A-Z]+_\d+) is saved successfully"
通过这种方式,您可以在第一个捕获组中获得所需的内容。
当然,这取决于您的采购订单的模式,您应该阅读有关正则表达式的内容。
答案 1 :(得分:0)
试
String recordNumber = str.replaceAll(".*?(\\w+/\\d{2}-\\d{2}-\\d{4}/\\w+).*", "$1");
答案 2 :(得分:0)
您是否需要使用正则表达式?出于性能和可读性的原因,如果有更合适的替代方案,最好避免使用它们。
在这种情况下,前缀和后缀似乎总是相同的长度,因此您只需使用String.substring
即可删除它们。如果订单ID始终以"Purchase Order "
为前缀,然后是" is saved successfully"
,那么您只需要修剪前面的15个字符和后面的22个字符:
String extract = "Purchase Order HDL/17-04-2013/PRO_1311 is saved successfully";
String orderId = extract.substring(15, extract.length() - 22);
(如果你想真的清楚这些魔术数字的来源,你可以将它们定义为例如private static final int PREFIX_LENGTH = "Purchase Order ".length();
)
答案 3 :(得分:0)
类似的东西:
String s = "Purchase Order HDL/17-04-2013/PRO_1311 is saved successfully";
Pattern p = Pattern.compile("(?<=Purchase Order ).+?(?= is saved successfully)");
Matcher m = p.matcher(s);
if (m.find()) {
System.out.println(m.group());
}
这是一个正则表达式,匹配两个短语中间的任何内容。 第一个括号是后面的字符串,第二个是前瞻字符串。