Pexpect可用于在python中自动执行任务(不需要安装TCL)。这个类中最简单的例程之一是'run()'例程。它接受预期问题模式的字典作为键,响应作为值。例如
pexpect.run('scp foo myname@host.example.com:。',events = {'(?i)password':mypassword})
我知道通常'?'用于表示字符串中前一个文字的0或1次出现(对于正则表达式)。但是,在这里,这似乎并不是意思。
专家可以评论它是什么吗?
答案 0 :(得分:9)
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)整个常规 表达。如果您愿意,这很有用 包括标志作为的一部分 正则表达式,而不是传递 compile()的一个标志参数 功能
请注意,(?x)标志会改变方式 解析表达式。它应该是 首先在表达式字符串中使用, 或者在一个或多个空格之后 字符。如果有 之前的非空格字符 标志,结果未定义。
因此,在这种情况下,字符串是正则表达式,并设置为不区分大小写。
答案 1 :(得分:4)
这是Python的re模块中正则表达式语法的扩展。 “i”表示“忽略案例”。这意味着对“密码”进行了不区分大小写的搜索。
来自https://docs.python.org/library/re.html#regular-expression-syntax
(?iLmsux) (来自集合“i”,“L”,“m”,“s”,“u”,“x”的一个或多个字母。) group匹配空字符串;该 字母设置相应的标志 (re.I,re.L,re.M,re.S,re.U,re.X) 对于整个正则表达式。 如果您希望包含此功能,这将非常有用 旗帜作为常规的一部分 表达式,而不是传递一个标志 compile()函数的参数。
请注意,(?x)标志会更改表达式的解析方式。它 应该首先在表达式中使用 字符串,或一个或多个之后 空白字符。如果有 之前的非空格字符 标志,结果未定义。