如何让pexpect匹配除指定行之外的所有内容?
假设我们有一个调用 pexpect.expect 的代码,像这样:
ret = pex.expect([re.escape(line), pexpect.EOF, pexpect.TIMEOUT], timeout)
if ret == 0:
do_stuff()
elif ret == 1:
do_eof_stuff()
elif ret == 2:
do_timeout_stuff()
我想做的不是匹配我感兴趣的那一行,而是想反过来,匹配除了那一行以外的任何内容,同时还要处理文件结束(EOF)和超时(TIMEOUT)。大概是这样的:
ret = pex.expect([not re.escape(line), pexpect.EOF, pexpect.TIMEOUT], timeout)
if ret == 0:
do_error_stuff()
elif ret == 1:
do_eof_stuff()
elif ret == 2:
do_timeout_stuff()
else:
# Our line "matched" so do stuff
do_stuff()
我知道 'not re.escape(line)' 这个写法是不对的,只是用来说明我想要的效果。那么我实际应该用什么来代替呢?
1 个回答
1
我试着用一种叫做“负向前瞻”的方法来解决这个问题:
ret = pex.expect([r'^((?!' + re.escape(line) + ').)*$', pexpect.EOF, pexpect.TIMEOUT], timeout)
这里需要注意的是,如果这一行是 hello world
这样的内容:
hello world -> won't match
hello world 2 -> won't match
my hello world -> won't match
hello worl -> will match
我不太确定你需要多具体的信息。