Как к “инверсии соответствуют” regex?

100
задан Legionar 9 August 2016 в 09:10
поделиться

6 ответов

(?!Andrea).{6}

Принятие Вашего regexp механизма поддерживает отрицательные предвидения..

Редактирование:.. или возможно Вы предпочли бы использовать [A-Za-z]{6} вместо .{6}

Редактирование (снова): Обратите внимание, что предвидения и lookbehinds обычно являются не правильным путем к "инверсии" соответствие регулярного выражения. Regexps действительно не созданы для того, чтобы сделать отрицательное соответствие, они оставляют это любому языку, с которым Вы используете их.

66
ответ дан Dan 24 November 2019 в 04:53
поделиться

Какой язык Вы используете? Возможности и синтаксис regex реализации имеют значение для этого.

Вы могли использовать предвидение. Используя Python как пример

import re

not_andrea = re.compile('(?!Andrea)\w{6}', re.IGNORECASE)

Для разрушения этого:

(?! Andrea) означает 'соответствие, если следующими 6 символами не является "Andrea"'; раз так тогда

\w означает "словесный символ" - алфавитно-цифровые символы. Это эквивалентно классу [a-zA-Z0-9 _]

, \w {6} означает точно 6 словесных символов.

ре. IGNORECASE означает исключение "Andrea", "andrea", "ANDREA"...

Иначе должен использовать Вашу логику программы - используют все строки, не соответствующие Andrea, и проводят их через второй regex для проверки на 6 символов. Или сначала проверьте по крайней мере на 6 словесных символов, и затем проверьте, что это не соответствует Andrea.

11
ответ дан Hamish Downer 24 November 2019 в 04:53
поделиться

Отрицательное предварительное утверждение

(?!Andrea)

Это не точно инвертированное соответствие, но лучше, чтобы можно было непосредственно сделать с regex. Не все платформы поддерживают их все же.

6
ответ дан Vinko Vrsalovic 24 November 2019 в 04:53
поделиться

Если Вы хотите сделать это в RegexBuddy, существует два способа получить список всех строк, не соответствующих regex.

На панели инструментов на Испытательном щите, набор тестовый объем к "Линию за линией". Когда Вы сделаете это, Список объекта, Все Строки без Соответствий появятся под кнопкой List All на той же панели инструментов. (Если Вы не видите кнопку List All, нажмите кнопку Match на основной панели инструментов.)

На панели GREP, можно включить "основанное на строке" и "флажки" результатов инвертирования для получения списка несогласующих отрезков длинной линии в файлах, которые Вы захватываете через.

5
ответ дан Jan Goyvaerts 24 November 2019 в 04:53
поделиться

В жемчуге можно сделать

процесс ($line) если ($line = ~!/Andrea/);

-3
ответ дан phreakre 24 November 2019 в 04:53
поделиться
47
ответ дан 24 November 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: