我尝试在以下字符串中获取uuid:
146916ad3ed2935cc82ebed705dc27213f907808 add partner request id = e4614f35-1f3c-4316-85c1-016bfffcc928
我错过了什么,因为我的匹配器无法取得它
@Test
public void requestIdRegex()
{
String gitCommit = "146916ad3ed2935cc82ebed705dc27213f907808 add partner request id = e4614f35-1f3c-4316-85c1-016bfffcc928";
String requestId = null;
Pattern pattern = Pattern.compile("(\\d+) add partner request id = (\\s+)");
Matcher matcher = pattern.matcher(gitCommit);
while (matcher.find()) {
requestId = matcher.group(2);
}
assertThat(requestId, equalTo("e4614f35-1f3c-4316-85c1-016bfffcc928"));
}
怎么可以
答案 0 :(得分:0)
您可以更改为:
Pattern pattern = Pattern.compile("(\\w+) add partner request id = ([-\\w]+)");
\\w
:任何单词字符根据评论中的建议,使用split
会使用较少的行:
String gitCommit = "1469......808 add partner request id = e4614f35-1f3c-4......fcc928";
String requestId = gitCommit.split(" add partner request id = ")[1];
答案 1 :(得分:0)
您的ID匹配模式为(\\s+)
。但\s
匹配空白字符,而不是数字和减号。
尝试使用与所有字词匹配的([\\w-]+)
模式(来自 az,AZ,0-9 和下划线的字符< EM> _ 的)。此外,-
与ID中的减号相匹配。
此外,您的第一个捕获组仅匹配数字,但它也包含字符 az ,您也可以将其更改为(\\w+)
以解决问题。< / p>
以下是经过调整的代码:
@Test
public void requestIdRegex()
{
String gitCommit = "146916ad3ed2935cc82ebed705dc27213f907808 add partner request id = e4614f35-1f3c-4316-85c1-016bfffcc928";
String requestId = null;
Pattern pattern = Pattern.compile("(\\w+) add partner request id = ([\\w-]+)");
Matcher matcher = pattern.matcher(gitCommit);
while (matcher.find()) {
requestId = matcher.group(2);
}
assertThat(requestId, equalTo("e4614f35-1f3c-4316-85c1-016bfffcc928"));
}
您可以在 regex101.com 上试用您的正则表达式模式,它还包含模式的说明。以下是您示例的链接:regex101.com/r/7kz5eB/1
答案 2 :(得分:0)
问题是您正在使用的正则表达式。试试这个:
Pattern p = Pattern.compile("(\\d|\\w)+ add partner request id = (((((\\d|\\w))+\\-))+(\\d|\\w)+)");
Matcher matcher = p.matcher(gitCommit);
while (matcher.find()) {
requestId = matcher.group(2);
}
System.out.println("RequestId = " + requestId);
结果是:
RequestId = e4614f35-1f3c-4316-85c1-016bfffcc928