首页 > 解决方案 > 使用正则表达式捕获一组连续数字

问题描述

我正在尝试仅捕获彼此相邻的两个 6,并使用正则表达式获取它发生了多少次,例如如果我们794234879669786694326666976的答案应该是 2 或者它的 66666 它应该为零等等,我正在使用以下代码并通过它捕获它(66)*并使用它matcher.groupcount()来获取它发生了多少次但它不起作用!

package me;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class blah {

    public static void main(String[] args) {

       // Define regex to find the word 'quick' or 'lazy' or 'dog'
    String regex = "(66)*";
    String text = "6678793346666786784966";

    // Obtain the required matcher
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(text);
    int match=0;

    int groupCount = matcher.groupCount();
    System.out.println("Number of group = " + groupCount);

    // Find every match and print it
    while (matcher.find()) {

        match++;
    }
    System.out.println("count is "+match);
}

}

标签: javaregex

解决方案


这里的一种方法是使用环视来确保您匹配正好两个六的岛屿:

String regex = "(?<!6)66(?!6)";
String text = "6678793346666786784966";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);

对于您提供的输入字符串,这会找到两个计数(两个匹配项分别66位于字符串的开头和结尾)。

正则表达式模式使用两个环视来断言第一个 6 之前和第二个 6 之后的不是其他 6:

(?<!6)   assert that what precedes is NOT 6
66       match and consume two 6's
(?!6)    assert that what follows is NOT 6

推荐阅读