【发布时间】:2019-10-07 12:42:43
【问题描述】:
我正在尝试使用 subprocess 和 re 用 Python (3.7.4) 包装 ping。
subprocess 函数中的stdout 是字节数组,因此我必须更改正则表达式类型以匹配大小写。
import subprocess,re
out = subprocess.run(['ping', '-c', '1', '8.8.8.8'], capture_output=True)
print(out.stdout)
match = re.match(br'P(..)G', out.stdout, re.DOTALL | re.MULTILINE)
if match:
print(match.groups())
match = re.match(br'trans(.)', out.stdout, re.DOTALL | re.MULTILINE)
if match:
print(match.groups())
ping 命令的实际输出:
b'PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.\n64 bytes from 8.8.8.8: icmp_seq=1 ttl=53 time=60.7 ms\n\n--- 8.8.8.8 ping statistics ---\n1 packets transmitted, 1 received, 0% packet loss, time 0ms\nrtt min/avg/max/mdev = 60.665/60.665/60.665/0.000 ms\n'
match.groups的第一个输出:
(b'IN',)
第二个是空的(应该是(b'm',)),其实第一个\n之后的都不能匹配。
注意我有re.MULTILINE,使用str() 或.decode() 转换为str 对输出没有任何影响。
检查了几种不同的在线工具,它们都有效,有什么想法吗?
【问题讨论】:
-
您没有编译正则表达式来匹配。此外,多行并不像您认为的那样做......它控制 ^ 和 $ 的行为
标签: python arrays regex python-3.x