Qual é o equivalente python de grep -v?

12

Eu 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, uso grep -v para extrair material estranho do texto.

Por exemplo,

$grep -v [a-z]
(confirms that I don't want those lines)
$grep [a-z] > linesiwanted

Mas como faço para combinar o complemento de um regex em Python? Por exemplo, o complemento de \w ?

    
por ixtmixilix 23.02.2012 / 16:45

2 respostas

15

Um regex em Python, o método search ou match , retorna um objeto Match ou None . Por 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])
    
por 23.02.2012 / 16:54
2

Acontece que você pode usar apenas [^ a-z] para dizer grep -v [a-z] .

Eu estou usando assim:

#!/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
    
por 24.02.2012 / 13:36