Что означает "(? I) пароль" в регулярном выражении Python?

Pexpect может использоваться для автоматизации задач в python (не требует установки TCL). Одной из самых простых процедур этого класса является процедура run(). Он принимает словарь ожидаемых шаблонов вопросов в качестве ключей и ответы в качестве значений. Например

pexpect.run ('scp foo myname@host.example.com:.', events={'(?i) пароль': mypassword})

Я знаю, что обычно "?" используется, чтобы указать 0 или 1 вхождение предыдущего литерала в строке (для регулярных выражений, которые есть). Однако здесь это не имеет смысла.

Могут ли эксперты прокомментировать, что это?

3 ответа

https://docs.python.org/library/re.html

(?...) Это расширение обозначения ("?" После "(" в противном случае не имеет смысла). Первый символ после "?" Определяет значение и дальнейший синтаксис конструкции. Расширения обычно делают не создавать новую группу; (?P...) является единственным исключением из этого правила. Ниже приведены поддерживаемые в настоящее время расширения.

(? iLmsux) (Одна или несколько букв из набора "i", "L", "m", "s", "u", "x".) Группа соответствует пустой строке; буквы устанавливают соответствующие флаги (re.I, re.L, re.M, re.S, re.U, re.X) ​​для всего регулярного выражения. Это полезно, если вы хотите включить флаги как часть регулярного выражения вместо передачи аргумента флага в функцию compile().

Обратите внимание, что флаг (? X) изменяет способ анализа выражения. Его следует использовать сначала в строке выражения или после одного или нескольких пробельных символов. Если перед флагом есть непробельные символы, результаты не определены.

Таким образом, в этом случае строка является регулярным выражением и устанавливается без учета регистра.

Это расширение в синтаксисе регулярных выражений в модуле re Python. "Я" означает "игнорировать регистр". Это означает, что поиск "пароля" выполняется без учета регистра.

из https://docs.python.org/library/re.html

(?iLmsux) (Одна или несколько букв из набора "i", "L", "m", "s", "u", "x".) Группа соответствует пустой строке; буквы устанавливают соответствующие флаги (re.I, re.L, re.M, re.S, re.U, re.X) ​​для всего регулярного выражения. Это полезно, если вы хотите включить флаги как часть регулярного выражения вместо передачи аргумента флага в функцию compile().

Обратите внимание, что флаг (? X) изменяет способ анализа выражения. Его следует использовать сначала в строке выражения или после одного или нескольких пробельных символов. Если перед флагом есть непробельные символы, результаты не определены.

Проще говоря,(?i)означает игнорировать регистр (это означает, что он соответствует любому регистру: нижнему, верхнему, заголовку... регистру).

Примечание. Начиная с Python 3.6, флаги должны быть в начале выражения, иначе вы получитеdeprecatingWarning.

Другие вопросы по тегам