Соответствует любой строке, которая отклоняется по крайней мере на один символ от данной строки - PullRequest
1 голос
/ 11 ноября 2019

Я столкнулся с проблемой, когда мне нужно было найти номер в наборе чисел, где все начинаются одинаково, но заканчиваются по-разному, например:

261234
261235
261236
261334
261244
261134 
260234
260134
260123

Могу добавить, что это было в журналефайл с каким-то другим бредом, который может усложнить проблему. Скажем, я хочу сопоставить что угодно, кроме 261134.

Моим первым инстинктом было попробовать 26[^1][^1][^3][^4], но это не соответствует ни одному из вышеперечисленных, потому что в какой-то момент у каждого и каждого из них есть один из отрицательных символов в позиции, для которой я указал отрицание. Следующее самое близкое к решению, которое я могу придумать, - это выражение длиной в милю, которое будет объединяться или складываться примерно так:

26([^1]134|1[^1]34|11[^3]4|113[^4])

Это, однако, еще не соответствует всем. Вместо этого я должен сделать:

26([^1]\d{3}|\d[^1]\d\d|\d\d[^3]\d|\d{3}[^4])

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

1 Ответ

3 голосов
/ 11 ноября 2019

Использование класса отрицательных символов, такого как [^1], ожидает совпадения и соответствует любому символу, кроме символа 1

При использовании этого шаблона 26([^1]\d{3}|\d[^1]\d\d|\d\d[^3]\d|\d{3}[^4]) будет соответствовать значениям, таким как 26$333 или 261)33


То, что вы можете сделать, это сопоставить 26 и использовать отрицательный прогноз (?!, чтобы утверждать, что прямо справа не 1134. Если утверждение выполнено успешно, сопоставьте 4 цифры.

Чтобы цифры не входили в большее слово, вы можете использовать границы слов \b

\b26(?!1134)\d{4}\b

Regex demo

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