Попытка сделать RegEx для 4 простых условий - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь сделать регулярное выражение для 4 простых условий:

  1. AdobeSoftware должен быть "Adobe" и "Software" -> Получить 2 строки "Adobe" и "Software"
  2. adobeSoftware должен быть "adobe" и "Software" -> Получить 2 строки "adobe" и "Software"
  3. ADobeSoftware должен быть "ADobe" и "Software" -> Get 2 strings " ADobe "и" Программное обеспечение "
  4. adobe1Software должно быть" Adobe "и" 1 "и" Программное обеспечение "-> Получить 3 строки" Adobe "и" 1 "и" Программное обеспечение "

Я не могу достичь последнего. Что я сделал:

("
 + "?<=[a-z])(?=[A-Z])|("
 + "?<=[A-Z])(?=[A-Z][a-z])|("
 + "?<=[0-9])(?=[A-Z][a-z])|("
 + "?<=[a-zA-Z])(?=[0-9])|(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])"))

Как мне добиться вышеизложенного с помощью регулярного выражения?

Ответы [ 3 ]

1 голос
/ 03 марта 2020

Вы можете получить эти совпадения, используя группы захвата вместо использования обходных путей и сделать необязательной группу для цифр:

\b([A-Z]*[a-z]+)(\d+)?([A-Z][a-z]+)\b
  • \b Граница слова, чтобы слово не входило в большее слово
  • ( Захват группа 1
    • [A-Z]*[a-z]+ Совпадение 0+ символов AZ, чтобы соответствовать A или AD, и 1+ символов AZ, чтобы соответствовать obe, dobe или adobe
  • ) Закрыть группу
  • (\d+)? Опциональный захват группа 2 в соответствии 1
  • ( Захват группа 3
    • [A-Z][a-z]+ Совпадение с символом AZ и 1+ символом az, чтобы соответствовать Software
  • ) Закрыть группу
  • \b \b Граница слова

Regex demo | Java demo

Или сопоставить 0+ цифр во второй группе (\d*)

Затем можно проверить, присутствует ли группа 2, или в В последнем случае проверьте значение группы 2.

Пример кода

String regex = "\\b([A-Z]*[a-z]+)(\\d+)?([A-Z][a-z]+)\\b";
String string = "AdobeSoftware\n"
     + "adobeSoftware\n"
     + "ADobeSoftware\n"
     + "adobe1Software";

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

while (matcher.find()) {
    for (int i = 1; i <= matcher.groupCount(); i++) {
        if (matcher.group(i) != null) {
            System.out.println(matcher.group(i));
        }
    }
    System.out.println("\n");
}

Выход

Adobe
Software

adobe
Software

ADobe
Software

adobe
1
Software
0 голосов
/ 03 марта 2020

Вы можете использовать выражение:

([A-Z]*[a-z]+)(\d+)?([A-Z]*[a-z]+)*

Как правило, выражения будут пытаться найти 3 группы: 1) Строка, которая начинается с нижнего регистра, 1 или более заглавных букв 2) Необязательный номер любого размера 3) Одна или несколько строк, которые начинаются со строчной буквы, 1 или более заглавных букв

0 голосов
/ 03 марта 2020

Регулярное выражение ([aA][dD][oO][bB][eE])([0-9]?)([a-zA-Z]+) соответствует всем 4 условиям, которые вы описали.

([aA][dD][oO][bB][eE]) будет сопоставлять слово «Adobe» с любой комбинацией букв верхнего и нижнего регистра. ([0-9]?) будет соответствовать опции di git между двумя словами. ([a-zA-Z]+) будет соответствовать любой последовательности букв.

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