Что означает "(? 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
.