我有一个函数可以定位一个完美工作的组
public static Optional<String> locateInText(String text, Pattern pattern) {
Matcher matcher = pattern.matcher(text);
return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty();
}
现在我正在尝试构建一个函数,该函数定位 2 个组并将它们连接起来,如果两个组不存在,则返回 String 中的值返回 1 组
public static Optional<String> locateInTextt(String text, Pattern pattern) {
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
if (matcher.groupCount() > 1) {
int sum = Integer.parseInt(matcher.group(1)) + Integer.parseInt(matcher.group(2));
return Optional.of(String.valueOf(sum));
} else if (matcher.groupCount() == 1) {
return Optional.of(matcher.group(1));
}
}
return Optional.empty();
}
如果有两个匹配项,测试确实有效,但如果只有一个匹配项,它会一直返回空,我缺少什么,我读了一些信息,似乎可以将组指示为可选,将不胜感激任何建议
用例文本:
Всего 2 Коробки, 193 Короб-шкафа
在这种情况下,我需要捕获两个组,即 2 和 193 = 195
第二个用例文本;
Всего 2 Коробки
第三个用例文本
Всего 193 Короб-шкафа
Pattern.compile("Всего\\s*(\\d*)\\s*Коробки,\\s*([\\d,]*)\\s*(?:Короб-шкаф[ова]*|Коробо*к[аи]*)");
最佳答案
根据您的帖子,您想要匹配其中的字符串和子字符串,我想不出正确的解决方案。不过,你的问题很简单,如果我们省略“Всего”,那么我们可以执行以下操作:
"((\\d*)\\s*Коробки|\\s*([\\d,]*)\\s*(?:Короб-шкаф[ова]*|Коробо*к[аи]*))"
查找带有“Коробки”的字符串或另一个字符串
关于java - 通过正则表达式捕获多个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59839440/