java - 通过正则表达式捕获多个组

标签 java regex matcher

我有一个函数可以定位一个完美工作的组

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/

相关文章:

ruby-on-rails-3 - 使用 capybara 和rails3进行Rspec View 测试

java - 循环遍历多个数组列表并获取元素

java - 如何反序列化实体,将其置于托管上下文中,但不保留任何更改?

regex - 使用 SED 从 shellscript 中的字符串中剥离前 X 个字符,现在存储为变量?

java - java中的匹配器,while循环中的匹配器行为?

arrays - 为 RSpec 数组匹配器启用差异

java - 每次连续调用此 `timerMethod` 时,timerInt 的值都会比以前增加得更快

java - 使用 Java SDK 从空 Azure ServiceBus 队列接收时接收非空消息

regex - M-x align-regexp 删除文本?

Python Regex - 非贪婪匹配不起作用