Как найти слова по данной букве, используя Java Regex - PullRequest
1 голос
/ 28 июня 2019
public class Homework {

  public static void main(String[] args) {

    String words[] = { "Abendessen", "Affe", "Affen", "aber", "anders", "Attacke", "arrangieren", "Art", "Asien",
            "Bund", "Arten", "Biene", "Abend", "baden", "suchen", "A1rten", "Abend-Essen" };

    Pattern pattern = Pattern.compile("[aA][a-z[n]+a-z]*");

    for (int i = 0; i < words.length; i++) {
      Matcher matcher = pattern.matcher(words[i]);
      if (matcher.find()) {
        System.out.println("OK: " + words[i]);
      }
    }
  }
}

Фильтры для слов, начинающихся с a или A и имеющих n в слове. Эти слова могут состоять только из букв и иметь только маленькие буквы, начинающиеся со второй буквы. Эти слова должны быть сопоставлены: Абендессен, Аффен, Андерс, Аранжир, Асиен, Артен, Абенд

Я небрежно попробовал это регулярное выражение выше и считаю, что это тоже неправильно.

1 Ответ

1 голос
/ 28 июня 2019

Ваш текущий шаблон [aA][a-z[n]+a-z]* читается как:

Класс символов [aA], класс символов [a-z[n]+.Затем следует a-z]*, который будет соответствовать a, -, z и ], повторенным 0+ раз.

Это, например, будет соответствовать Abendessena-z]

Что вы можете сделать, это начать матч с A или A и повторить 2 раза [a-z] 0+ раз и убедиться, что в середине есть n:

\b[aA][a-z]*n[a-z]*\b

Объяснение

  • \b Граница слова
  • [aA] Совпадение или A
  • [a-z]* Совпадение 0+ раз az
  • n Совпадение n
  • [a-z]* Совпадение 0+ раз az
  • \b Граница слова

Вы также можете использовать якоря ^ и $, чтобы утверждать, что начало и конец строки вместо \b

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...