我喜欢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 中的正则表达式,无论是search
或match
方法,都会返回一个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