Îmi place grep -v. Îl folosesc tot timpul. Dar fac și unele procesări de text în python și există un lucru crucial care îmi lipsește. 
 De obicei, folosesc grep -v pentru a scoate lucruri străine din text. 
De exemplu,
$ grep -v "[a-z]" # (I manually review this output to confirm that I don"t want those lines) $ grep "[a-z]" > linesiwanted 
 Dar cum pot potrivi complementul unei regexuri în Python? De exemplu, complementul \w? 
Comentarii
- vezi stackoverflow.com/questions/164414/…
 - Acolo ' discuție similară despre grep în python pe SO: stackoverflow.com/questions/1921894/grep-and-python , această întrebare versiune mai specifică a acelei
 - \ w = orice caracter de cuvânt \ W = orice caracter care nu conține cuvânt
 
Răspuns
 O regex în Python, fie search, fie match, returnează un obiect Match sau None. Pentru echivalentul grep -v, puteți utiliza: 
 import re for line in sys.stdin: if re.search(r"[a-z]", line) is None: sys.stdout.write(line)  
Sau mai concis:
 import re; sys.stdout.writelines([line for line in sys.stdin if re.search(r"[a-z]", line) is None])  
Comentarii
- +1 link-ul SO din comentariu menționează afirmații negative, dar, sincer, cred că fragmentul dvs. este mult mai sensibil și elegant. mulțumesc.
 - se pare că poți folosi și [^ az] pentru a se potrivi cu complementul setului [az]
 
Răspunde
 Se pare că puteți folosi [^ az] pentru a însemna grep -v [a-z]. 
Îl folosesc ca :
 #!/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  
Comentarii
-   Acestea nu sunt aceleași.  
grep -v '[a-z]'înseamnă " excludeți orice linie care conține un caracter în interval de laalaz" dar tu ' am implementatgrep '[^a-z]'ceea ce înseamnă că " include orice linie care conține un caracter not în intervalul de laalaz. " Dacă o linie areabc123atunci interogarea dvs. o va imprima eronat deoarece1îndeplinește acel criteriu.grep -v '[a-z]'nu va imprima această linie deoareceaîndeplinește criteriile anulate.