Gosto de grep -v. Eu uso isso o tempo todo. Mas também estou fazendo algum processamento de texto em python, e há uma coisa crucial que me falta. 
 Normalmente, eu uso grep -v para remover coisas estranhas de texto. 
Por exemplo,
$ grep -v "[a-z]" # (I manually review this output to confirm that I don"t want those lines) $ grep "[a-z]" > linesiwanted 
 Mas como faço para combinar o complemento de uma regex em Python? Por exemplo, o complemento de \w? 
Comentários
- consulte stackoverflow.com/questions/164414/…
 - Lá ' sa discussão semelhante sobre grep em python em SO: stackoverflow.com/questions/1921894/grep-and-python , esta questão é uma versão mais específica disso
 - \ w = qualquer palavra char \ W = qualquer não-palavra char
 
Resposta
 Um regex em Python, os métodos search ou match retornam um objeto Match ou None. Para grep -v equivalente, você pode usar: 
 import re for line in sys.stdin: if re.search(r"[a-z]", line) is None: sys.stdout.write(line)  
Ou mais concisamente:
 import re; sys.stdout.writelines([line for line in sys.stdin if re.search(r"[a-z]", line) is None])  
Comentários
- +1 no link do SO no comentário menciona afirmações de antecipação negativa, mas para ser honesto, acho que seu snippet é muito mais sensível e elegante. obrigado.
 - Acontece que você também pode usar [^ az] para combinar o complemento do conjunto [az]
 
Resposta
 Acontece que você pode simplesmente usar [^ az] para significar grep -v [a-z]. 
Estou usando como :
 #!/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  
Comentários
-   Eles não são iguais.  
grep -v '[a-z]'significa " excluir qualquer linha que contenha um caractere no intervalo deaaz", mas você ' ve implementadogrep '[^a-z]'que significa " incluir qualquer linha que contenha um caractere não no intervalo deaparaz. " Se uma linha tiverabc123então sua consulta irá imprimi-lo erroneamente porque1satisfaz esses critérios.grep -v '[a-z]'não imprimirá esta linha porqueasatisfaz os critérios negados.