grep -v
が好きです。いつも使っています。しかし、Pythonでテキスト処理も行っています。欠けている重要なことが1つあります。
通常、私は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
?
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])
[^ a-z]を使用して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