繁体   English   中英

如何从python正则表达式中排除特定字符串

[英]How can I exclude a specific string from from python regex

我正在尝试解析/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或负向前瞻, 这里描述如下:

r'^(?!/boot).*$'

如果你需要捕获'servernfs:'一个而不是'servernfs:/ boot',你需要撒上一点'|' 和'([az] + :)'位于顶部('^'之后)

只需排除该行:

for line in proc.stdout:
  if 'boot' not in line:
      # the rest

但是,由于mtab是在空间上分隔的,因此您可以使用split

>>> with open('foo.txt') as f:
...     lines = [line.split(' ') for line in f if 'boot' not in line]
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM