python 中 grep -v 的等价物是什么?

python 中 grep -v 的等价物是什么?

我喜欢grep -v。我用它所有的时间。但我也在用 python 进行一些文本处理,但我缺少一件至关重要的事情。

通常,我习惯grep -v从文本中剔除无关的内容。

例如,

$ grep -v '[a-z]'
# (I manually review this output to confirm that I don't want those lines)

$ grep '[a-z]' > linesiwanted

但是如何在 Python 中匹配正则表达式的补集呢?例如,\w?的补集。

答案1

Python 中的正则表达式,无论是searchmatch方法,都会返回一个Match对象 或None。对于grep -v等效项,您可以使用:

import re
for line in sys.stdin:
    if re.search(r'[a-z]', line) is None:
        sys.stdout.write(line)

或者更简洁地说:

import re; sys.stdout.writelines([line for line in sys.stdin if re.search(r'[a-z]', line) is None])

答案2

事实证明你可以只使用 [^az] 来表示grep -v [a-z]

我这样使用它:

#!/usr/bin/env python
# coding=UTF-8

import sys, re

for file in sys.argv[1:]:
    f = open(file)
    string = f.read()
    regex = re.compile('[^a-z]')
    subs = regex.sub('', string)
    f.close()
    print subs

相关内容