Ich mag grep -v. Ich benutze es die ganze Zeit. Aber ich mache auch eine Textverarbeitung in Python, und es gibt eine entscheidende Sache, die mir fehlt. 
 Normalerweise verwende ich grep -v, um überflüssiges Material zu entfernen Text. 
Zum Beispiel
$ grep -v "[a-z]" # (I manually review this output to confirm that I don"t want those lines) $ grep "[a-z]" > linesiwanted 
 Aber wie kann ich das Komplement einer Regex in Python abgleichen? Zum Beispiel das Komplement von \w? 
Kommentare
- siehe stackoverflow.com/questions/164414/…
 - Dort ' sa ähnliche Diskussion über grep in Python auf SO: stackoverflow.com/questions/1921894/grep-and-python , diese Frage spezifischere Version davon
 - \ w = ein beliebiges Wort char \ W = ein beliebiges Nicht-Wort-Zeichen
 
Antwort
 Ein regulärer Ausdruck In Python gibt entweder die Methode search oder match ein Match -Objekt oder None. Für grep -v Äquivalent können Sie Folgendes verwenden: 
 import re for line in sys.stdin: if re.search(r"[a-z]", line) is None: sys.stdout.write(line)  
Oder genauer:
 import re; sys.stdout.writelines([line for line in sys.stdin if re.search(r"[a-z]", line) is None])  
Kommentare
- +1 Der SO-Link im Kommentar erwähnt negative Aussagen, aber um ehrlich zu sein, denke ich, dass Ihr Snippet viel vernünftiger und eleganter ist. danke.
 - es stellt sich heraus, dass Sie auch [^ az] verwenden können, um das Komplement der Menge [az]
 
Antwort
abzugleichen
 Es stellt sich heraus, dass Sie einfach [^ az] verwenden können, um grep -v [a-z] zu bedeuten. 
Ich verwende es wie :
 #!/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  
Kommentare
-   Diese sind nicht identisch.  
grep -v '[a-z]'bedeutet, dass " alle Zeilen ausschließt, die ein Zeichen im Bereich enthalten vonabisz" aber Sie ' habegrep '[^a-z]'implementiert, was bedeutet, dass " jede Zeile enthält, die ein Zeichen nicht im Bereich vonabisz. " Wenn eine Zeileabc123dann wird Ihre Abfrage sie fälschlicherweise drucken, weil1erfüllt diese Kriterien.grep -v '[a-z]'druckt diese Zeile nicht, daadie negierten Kriterien erfüllt.