我需要正则表达式从下面的字符串中提取记录号,
String extract = "Purchase Order HDL/17-04-2013/PRO_1311 is saved successfully"
输出:
HDL/17-04-2013/PRO_1311
我尝试谷歌搜索,但无法得到结果。请建议。
就像是:
"Purchase Order ([A-Z]+/\d{2}-\d{2}-\d{4}/[A-Z]+_\d+) is saved successfully"
这样,您将在第一个捕获组中获得所需的内容。
当然,这取决于您的采购订单的模式,您应该阅读一些有关正则表达式的内容。
尝试
String recordNumber = str.replaceAll(".*?(\\w+/\\d{2}-\\d{2}-\\d{4}/\\w+).*", "$1");
您需要使用正则表达式是否有特殊原因?出于性能和可读性的原因,如果有更合适的替代方案,最好避免使用它们。
在这种情况下,前缀和后缀似乎总是相同的长度,因此您可以简单地使用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);
(如果您想真正清楚这些神奇数字的来源,您可以将它们定义为 eg private static final int PREFIX_LENGTH = "Purchase Order ".length();
)
就像是:
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());
}
这是一个匹配两个短语中间的任何内容的正则表达式。第一个括号是后面的字符串,第二个是前面的字符串。