【问题标题】:REGEX in java for extracting consecutive duplicate characters in a stringJava中的REGEX用于提取字符串中的连续重复字符
【发布时间】:2021-09-30 12:00:54
【问题描述】:

问题打印字符串中连续重复两次的字符(不多)。

示例

1)"aaabbaa" : b 和 a
2)"aabbaa" : a 和 b 和 a
3)“阿巴”:b

我尝试过的代码

字符串 str = "aabbbbcccd";
模式 p = Pattern.compile("(\w){2}");
匹配器 m = p.matcher(str);
而(m.find())
{
System.out.println(m.group(1));
}

输出
a
b
b
c
d
虽然,所需的输出是
一个
d

后记
正如我最近开始使用正则表达式一样,如果回答者可以解释,将不胜感激
简单使用的正则表达式(尤其是量词和组)。

【问题讨论】:

    标签: java regex string duplicates


    【解决方案1】:

    这个问题没有单一的正则表达式解决方案,因为您需要一个带有反向引用的后向引用,Java 正则表达式引擎不支持。

    您可以做的是获取所有 (\w)\1+ 匹配项,然后使用常见的字符串方法检查它们的长度:

    String s = "aaabbaa";
    Pattern pattern = Pattern.compile("(\\w)\\1+");
    Matcher matcher = pattern.matcher(s);
    while (matcher.find()){
        if (matcher.group().length() == 2) System.out.println(matcher.group(1)); 
    } 
    

    (请参阅Java demo)或者您可以匹配 3 次或更多重复或仅 2 次重复,并且仅在第 2 组匹配时才获得匹配:

    String s = "aaabbaa";
    Pattern pattern = Pattern.compile("(\\w)\\1{2,}|(\\w)\\2");
    Matcher matcher = pattern.matcher(s);
    while (matcher.find()){
        if (matcher.group(2) != null)
            System.out.println(matcher.group(2)); 
    } 
    

    this Java demo正则表达式详细信息

    • (\w)\1{2,} - 一个单词 char 和两个或多个相同的 char 紧随其后
    • | - 或
    • (\w)\2 - 一个单词 char 和紧随其后的同一个 char。

    【讨论】:

    • 当然。我有一些疑问:1)在第一种情况下,我可以使用 > 或 > (\\w){2}">> 2) > 是否告诉编译器它适用于第 1 组。 3) 我可以使用 > 代替 >
    • @believer {1,}+ 相同,它重复它修改的模式一次或多次。 \w+ 匹配一个或多个字母/数字/_,因此匹配 ab123_any___123_ 等。(\w)\1 中的 \1 是对 Group 1 值的反向引用,并且仅匹配已捕获的内容。使用任何你需要的东西,它只取决于你的实际需求,但有一件事是肯定的:你不能只是将\1 更改为+
    猜你喜欢
    • 2019-10-13
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    相关资源
    最近更新 更多