使用正则表达式

时间:2017-09-07 10:53:35

标签: java regex

我有一个字符串,我想用java中的正则表达式替换,但我不太清楚如何做到这一点。

假设我有以下代码:

String globalID="60DC6285-1E71-4C30-AE36-043B3F7A4CA6";
String regExpr="^([A-Z0-9]{3})[A-Z0-9]*|-([A-Z0-9]{3})[A-Z0-9]*$|-([A-Z0-9]{2})[A-Z0-9]*"

我想要做的是在globalID中应用我的regExpr,所以新字符串将是:60D1E4CAE043;我用str.substring(0,3)+做到了....但我想知道我是否可以使用java中的regexpr来做到这一点。我试图通过使用replaceAll来做到这一点,但输出不是我上面描述的那个。

更具体地说,我想使用上面描述的regexpr将globalID更改为newglobalID。 newglobalID将是:60D1E4CAE043。

由于

3 个答案:

答案 0 :(得分:0)

您的正则表达式必须与整个字符串匹配。你的wersioe试图匹配那些不起作用的部分。

你的这个:

String regExpr="^([A-Z0-9]{3})[^-]*"+
               "-([A-Z0-9]{2})[^-]*"+
               "-([A-Z0-9]{3})[^-]*"+
               "-([A-Z0-9]{2})[^-]*"+
               "-([A-Z0-9]{2}).*"

答案 1 :(得分:0)

这绝对不是有史以来最好的代码,但你可以这样做:

String globalID = "60DC6285-1E71-4C30-AE36-043B3F7A4CA6";
String regExpr = "^([A-Z0-9]{3})[A-Z0-9]*|-([A-Z0-9]{3})[A-Z0-9]*$|-([A-Z0-9]{2})[A-Z0-9]*";

Pattern pattern = Pattern.compile(regExpr);
Matcher matcher = pattern.matcher(globalID);
String newGlobalID = "";
while (matcher.find()) {
    for (int i = 1; i <= matcher.groupCount(); i++) {
        newGlobalID += matcher.group(i) != null ? matcher.group(i) : "";
    }
}
System.out.println(newGlobalID);

您需要使用Matcher来迭代输入中的所有匹配项,因为正则表达式仅匹配输入字符串的子序列。根据匹配的子字符串,不同的捕获组将是非空的,您还可以使用命名捕获组或记住当前输入中的位置,但上面的代码应该作为示例。

答案 2 :(得分:0)

总代码应如下所示,

String globalID = "60DC6285-1E71-4C30-AE36-043B3F7A4CA6";
    String regExpr = "^(\\w{3}).*?-"
            + "(\\w{2}).*?-"
            + "(\\w{2}).*?-"
            + "(\\w{2}).*?-"
            + "(\\w{3}).*";
    System.out.println(globalID.replaceAll(regExpr, "$1$2$3$4$5"));

println函数的输出是

60D1E4CAE043