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?
コメント
- stackoverflow.com/questions/164414/ …
 - そこに' sa SOでのPythonのgrepに関する同様の議論: stackoverflow.com/questions/1921894/grep-and-python 、この質問のより具体的なバージョン
 - \ w =任意の単語文字\ W =任意の非単語文字
 
回答
正規表現Pythonでは、searchまたはmatchメソッドのいずれかが、Matchオブジェクトまたは
。 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])  
コメント
- +1コメントのSOリンクはネガティブルックアヘッドアサーションに言及していますが、正直なところ、あなたのスニペットははるかに賢明でエレガントだと思います。ありがとう。
 - [^ az]を使用してセットの補集合に一致させることもできます[az]
 
回答
 [^ 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  
コメント
-  これらは同じではありません。 
grep -v '[a-z]'は、"範囲内の文字を含む行を除外することを意味しますaからz"になりますが、'はgrep '[^a-z]'を実装しました。これは、"がaからz。"行にabc123次に、はその基準を満たしています。aが否定された基準を満たしているため、grep -v '[a-z]'はこの行を出力しません。