java regex在字符串后获取uuid

时间:2017-07-17 14:03:56

标签: java regex

我尝试在以下字符串中获取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"));
}

怎么可以

3 个答案:

答案 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