У меня большая база данных. Я хочу проверить свою базу данных на наличие ошибок. Я использую этот шаблон для повторяющихся символов. Шаблон работает, но мне нужно начать и закончить условие со строкой.
Шаблон:
(\w)\1+
Целевая строка:
Javaaa
Результат: ааа
Я хочу добавить условие в регулярное выражение ; Начните с Ja и закончите a *. Результат ** должен содержать только символы.
(Я не хочу программно управлять только регулярным выражением, если это возможно
(Я делаю это с
String.replaceAll(regex, string)
, чтобы неPattern or Matcher
класс)
2 ответа
Вы можете использовать опережающий просмотр, привязанный к границе ведущего слова:
\b(?=Ja\w*a\b)\w*?((\w)\2+)\w*\b
См. демонстрацию регулярного выражения
Детали:
\b
- граница ведущего слова(?=Ja\w*a\b)
- положительный просмотр вперед, при котором все слово должно начинаться сJa
, затем оно может содержать более 0 символов и заканчиваться наa
\w*?
- 0+ словосочетаний, но как можно меньше((\w)\2+)
- Группа 1, в которой совпадают одинаковые последовательные символы\w*
- любые оставшиеся символы слова (0 или более)\b
- конечная граница слова.
Результат, который вы ищете, находится в группе 1.
String s = "Prooo\nJavaaa";
Pattern pattern = Pattern.compile("\\b(?=Ja\\w*a\\b)\\w*?((\\w)\\2+)\\w*\\b");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group(1));
}
См. демонстрацию Java.
Другой пример кода (вдохновленный кодом @Wiktor Stribizew) в соответствии с ожидаемым форматом ввода и вывода.
public static void main( String[] args )
{
String[] input =
{ "Javaaa", "Javaaaaaaaaa", "Javaaaaaaaaaaaaaaaaaa", "Paoooo", "Paoooooooo", "Paooooooooxxxxxxxxx" };
for ( String str : input )
{
System.out.println( "Target String :" + str );
Pattern pattern = Pattern.compile( "((.)\\2+)" );
Matcher matcher = pattern.matcher( str );
while ( matcher.find() )
{
System.out.println( "result: " + matcher.group() );
}
System.out.println( "---------------------" );
}
System.out.println( "Finish" );
}
Вывод:
Target String :Javaaa
result: aaa
---------------------
Target String :Javaaaaaaaaa
result: aaaaaaaaa
---------------------
Target String :Javaaaaaaaaaaaaaaaaaa
result: aaaaaaaaaaaaaaaaaa
---------------------
Target String :Paoooo
result: oooo
---------------------
Target String :Paoooooooo
result: oooooooo
---------------------
Target String :Paooooooooxxxxxxxxx
result: oooooooo
result: xxxxxxxxx
---------------------
Finish
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.