我试图解析/etc/mtab
,但排除/boot
。我想也许非抓捕组是可行的方法,但它并不像我所期望的那样有效。这是我构造的正则表达式:
proc = subprocess.Popen(["ssh", server, "cat", mtab],stdout = subprocess.PIPE)
for line in proc.stdout:
fsMatch = re.search(r'([\w/:]+) (/([\w/:-]+)|(?:boot)) (nfs|ext3)', line)
if fsMatch:
print fsMatch.group(1,2,4)
输出:
('/dev/sda1', '/boot', 'ext3')
('/dev/mapper/foo1', '/export/foo1', 'ext3')
('/dev/mapper/foo2', '/export/foo2', 'ext3')
('/dev/mapper/foo3', '/export/foo3', 'ext3')
('/dev/mapper/foo4', '/export/foo4', 'ext3')
('/dev/mapper/foo5', '/export/foo5', 'ext3')
('servernfs:/install', '/mnt', 'nfs')
我很有信心|
是错误的(显然更多是错误的),但遇到了障碍。
我正在查找/[\w/:-]+
的所有匹配项,但排除/boot
的匹配项
建议?
您需要使用负lookbehind或负lookahead,如here所述,并提供以下提示:
如果需要捕获“servernfs:”一个而不是“servernfs:/boot”,则需要在顶部的某个位置(在“^”之后)撒上一点“|”和“([a-z]+:)”
只需排除行:
但是,由于
mtab
是用空格分隔的,所以您可以只使用split
:相关问题 更多 >
编程相关推荐