RegEx: исключение шаблона из совпадения - PullRequest
1 голос
/ 18 июня 2020

Я знаю некоторые основы RegEx, но не профессионал в этом. И я этому учусь. В настоящее время я использую следующее очень простое регулярное выражение для соответствия любому di git в данном предложении.

/d

Теперь я хочу, чтобы все цифры, кроме некоторых шаблонов, таких как e074663 OR e123444 OR e7736, должны быть исключены из совпадения. Итак, для следующего ввода:

Edit 398 e 997979 Expression 9798729889 & T 900980980098 ext чтобы увидеть совпадения e081815. Для получения подробной информации наведите курсор на совпадения или e081815 выражение e081815. E081815 PCRE и JavaScript разновидности RegEx поддерживаются e081815. Проверьте свое выражение в режиме тестирования e081815.

Должны совпадать только цифры, выделенные жирным шрифтом, а не какие-либо e081815. Я безуспешно пробовал следующее.

(^[e\d])(\d)

Кроме того, в дальнейшем необходимо добавить еще несколько шаблонов для исключения. Например, cg636553 OR cg (любые цифры). Любая помощь в этом отношении будет принята с благодарностью. Спасибо!

Ответы [ 2 ]

3 голосов
/ 18 июня 2020

Другой вариант - использовать группу захвата с поисковыми маршрутами

(?:\b(?!e|cg)|(?<=\d)\D)[A-Za-z]?(\d+)
  • (?: Группа без захвата
    • \b(?!e|cg) Граница слова, подтвердите, что находится прямо справа не e или cg
    • | Или
    • (?<=\d)\D Соответствует любому символу, кроме di git, утверждая, что то, что находится прямо слева, - это di git
  • ) Закрыть группу
  • [A-Za-z]? Сопоставить необязательный символ a-zA-Z
  • (\d+) Захват 1 или более цифр в группа 1

Демо Regex

3 голосов
/ 18 июня 2020

Попробуйте это:

(?<!\be)(?<!\d)\d+

Протестируйте вживую на regex101.com .

Пояснение:

(?<!\be) # make sure we're not right after a word boundary and "e"
(?<!\d)  # make sure we're not right after a digit
\d+      # match one or more digits

Если вы хотите сопоставить отдельные цифры, вы можете добиться этого с помощью привязки \G, которая соответствует позиции после успешного сопоставления:

(?:(?<!\be)(?<=\D)|\G)\d

Протестируйте здесь

...