Java 正则表达式双分裂

Java 正则表达式双分裂,java,regex,regex-negation,regex-lookarounds,regex-group,Java,Regex,Regex Negation,Regex Lookarounds,Regex Group,如果我想找到两个匹配项,Java正则表达式应该是什么样子 1. NEW D City 2. 1259669 从 我试过了 (?<=:\s)\w+ 您可以使用两个拆分的组合: String key = "Object No: NEW D City | Item ID: 1259669"; String[] parts = key.split("\\s*\\|\\s*"); List<String> result = new ArrayList<>(); for

如果我想找到两个匹配项,Java正则表达式应该是什么样子

1. NEW D City 
2. 1259669

我试过了

(?<=:\s)\w+

您可以使用两个拆分的组合:

String key = "Object No: NEW D City | Item ID: 1259669";
String[] parts = key.split("\\s*\\|\\s*");
List<String> result = new ArrayList<>();
for (String part : parts) {
    String[] kvp = part.split(":\\s*");
    if (kvp.length == 2) {
        result.add(kvp[1]);
        System.out.println(kvp[1]); // demo
    }
}

看。在这个正则表达式中,
([^ |]+)
是一个捕获组(将其内容推入
匹配器.group(1)
),它匹配一个或多个(
+
)字符,而不是
(使用
[^ |]
否定字符类)。

使用模式捕获这两个值更简单。以下是所使用的:

以及由regex101生成的代码,并根据需要进行调整以匹配输出

    final String regex = "Object No: ([^|]*)\\| Item ID: (\\d*)";
    final String string = "Object No: NEW D City | Item ID: 1259669";

    final Pattern pattern = Pattern.compile(regex);
    final Matcher matcher = pattern.matcher(string);

    while (matcher.find()) {
        for (int i = 1; i <= matcher.groupCount(); i++) {
            System.out.println(+ i + ": " + matcher.group(i));
        }
    }

一个类似但更通用的解决方案是
[^::][*[:\s]*([^ |]*)\\\\[^:][*[:\s]*(\d*)
(不完美,我没有尝试做一些有效的事情)

您的实际输入数据是什么样子的?它是否由像您显示的那样成对的行组成?
(?尝试
s.split(\\s*\\\\\\\\\?\\s*[^:\\]+:\\s*”)
,但更合适的方法是匹配
:\s*([^:\\]+)
和trim
.group(1)
。您可以使用:我不确定正则表达式是否适合此工具。
String key = "Object No: NEW D City | Item ID: 1259669";
String[] parts = key.split("\\s*\\|\\s*");
List<String> result = new ArrayList<>();
for (String part : parts) {
    String[] kvp = part.split(":\\s*");
    if (kvp.length == 2) {
        result.add(kvp[1]);
        System.out.println(kvp[1]); // demo
    }
}
String s = "Object No: NEW D City | Item ID: 1259669";
List<String> result = new ArrayList<>();
Pattern p = Pattern.compile(":\\s*([^|]+)");
Matcher m = p.matcher(s);
while(m.find()) {
    result.add(m.group(1).trim());
    System.out.println(m.group(1).trim()); // For demo
}
Object No:([^|]*)\| Item ID: (\d*)
    final String regex = "Object No: ([^|]*)\\| Item ID: (\\d*)";
    final String string = "Object No: NEW D City | Item ID: 1259669";

    final Pattern pattern = Pattern.compile(regex);
    final Matcher matcher = pattern.matcher(string);

    while (matcher.find()) {
        for (int i = 1; i <= matcher.groupCount(); i++) {
            System.out.println(+ i + ": " + matcher.group(i));
        }
    }
1: NEW D City 
2: 1259669