正则表达式从Java中的String中获取记录号?

时间:2013-04-17 10:28:17

标签: java regex

我需要正则表达式从下面的字符串中提取记录号,

String extract = "Purchase Order HDL/17-04-2013/PRO_1311 is saved successfully"

输出:

HDL/17-04-2013/PRO_1311

我尝试使用谷歌搜索,但无法得到结果。请建议。

4 个答案:

答案 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());
}

这是一个正则表达式,匹配两个短语中间的任何内容。 第一个括号是后面的字符串,第二个是前瞻字符串。