1

假设有这样一个对 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)' 是无效的,它只是展示我想要什么的一种方式。我会在它的地方实际使用什么?

4

1 回答 1

1

我使用否定的前瞻来玩弄这个:

ret = pex.expect([r'^((?!' + re.escape(line) + ').)*$', pexpect.EOF, pexpect.TIMEOUT], timeout)

这里需要注意的是,如果 line 是hello world例如:

hello world -> won't match
hello world 2 -> won't match
my hello world -> won't match
hello worl -> will match

不确定您需要的具体程度。

于 2013-03-07T19:31:39.767 回答