Шаблон соответствия не предшествует или сопровождается строкой - PullRequest
0 голосов
/ 25 января 2020

Мне нужно сопоставить любую последовательность из 9 цифр или более, которой не предшествует ИЛИ , за которой следуют 2 заглавные буквы, где угодно в тексте:

OG237338070BR // should NOT match
og237338070br // should match
oG237338070bR // should match
G237338070BR  // should match
OG237338070B  // should match
G237338070B   // should match
asd OG237338070BR asd    // should NOT match
asd G237338070BR asd     // should match
asd OG237338070B asd     // should match
asd OG237338070Basd asd  // should match
asd OG237338070BRasd asd // should NOT match

Я безуспешно пытался следующее:

(?![A-Z]{2}(\d{9,})[A-Z]{2})(\d{9,})

Этот игнорирует отрицательный взгляд, просто потому, что он может начаться где угодно

Благодаря сочетанию Negative Lookahead и Negative Lookbehind я смог выполнить операцию AND, но не операцию OR:

(?<![A-Z]{2})(\d{9,})(?![A-Z]{2})

Эта комбинация соответствует, только если ей не предшествуют 2 заглавные буквы И не сопровождается 2 заглавными буквами

Итак, вопрос: возможно ли это только с помощью Regex?

Информация:

1 - целевой движок. Net, поэтому я могу использовать отрицательный вид сзади переменной длины.

2 - я не могу использовать start string и end string якоря (по крайней мере, я думаю, что я не могу), потому что мое совпадение может быть где угодно в строке и даже может происходить несколько раз в одной строке (текст).

3 - Это не дубликат Я не мог нигде найти условие ИЛИ с предшествующими и последующими последовательностями / строками. Самым близким, кого я нашел, был кто-то, кто пытался сопоставить шаблон, за которым не следовал символ, и он / она мог использовать начальные и конечные якорные строки.

4 - То, что я уже нашел и попробовал:

Соответствует только в том случае, если перед ним не стоит или не следует ди git

javascript регулярное выражение, слово не следует и не предшествует конкретному c char

Регулярное выражение - строка соответствия, не предшествующая другой строке (JavaScript)

Шаблон соответствия, которому не предшествует символ

Регулярное выражение совпадает с точным словом, которому не предшествуют или не следуют другие символы

https://superuser.com/questions/477463/is-it-possible-to-use-not-in-a-regular-expression-in-textmate

Regex: соответствовать всем но указать c шаблон

регулярное выражение: сопоставить все, кроме одного слова

1 Ответ

1 голос
/ 25 января 2020

Со второй попытки, которая выполняет логическое И, вы почти на месте. Просто используйте | для разделения двух возможных сценариев ios:

(?<![A-Z]{2})(\d{9,})|(\d{9,})(?![A-Z]{2})

...