Что означает «(? I) пароль» в регулярном выражении Python? - PullRequest
5 голосов
/ 21 октября 2008

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

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

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

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

Ответы [ 2 ]

9 голосов
/ 21 октября 2008

https://docs.python.org/library/re.html#regular-expression-syntax

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

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

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

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

4 голосов
/ 21 октября 2008

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

от https://docs.python.org/library/re.html#regular-expression-syntax

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

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

...