编写正则表达式以检测重复字符

2022-09-04 22:09:04

我需要写一个正则表达式,它将标识一个在末尾具有重复字符集的单词。根据以下代码片段,重复字符集为 。我需要编写一个正则表达式,以便将其发现并显示。An

根据以下代码,将匹配任何单词字符(包括数字,字母或特殊字符)。但我只想识别英文字符。\\w

String stringToMatch = "IranAnAn";
Pattern p = Pattern.compile("(\\w)\\1+");
Matcher m = p.matcher(stringToMatch);
if (m.find())
{
    System.out.println("Word contains duplicate characters " + m.group(1));
}

更新

Word contains duplicate characters a
Word contains duplicate characters a
Word contains duplicate characters An

答案 1

你想在你的集合中捕获尽可能多的字符,所以你应该使用而不是你希望序列在最后,所以你需要添加(我已经删除了之后的,这对检测重复没有用:只需要一个重复):(\\w)(\\w+)$+\\1

Pattern p = Pattern.compile("(\\w+)\\1$");

然后,您的程序将按预期输出。An

最后,如果您只想捕获 ascii 字符,则可以使用代替 :[a-zA-Z]\\w

Pattern p = Pattern.compile("([a-zA-Z]+)\\1$");

如果您希望字符集至少为 2 个字符:

Pattern p = Pattern.compile("([a-zA-Z]{2,})\\1$");

答案 2

如果“仅英文字符”是指 A-Z 和 a-z,则以下正则表达式将起作用:

".*([A-Za-z]{2,})\\1$"