Mi a grep -v python megfelelője?

Tetszik a grep -v. Állandóan használom. De valamilyen szövegfeldolgozást is végzek a pythonban, és egy kulcsfontosságú dolog hiányzik belőlem.

Általában grep -v -t használok, hogy idegen dolgokat vegyek ki belőle. szöveg.

Például:

$ grep -v "[a-z]" # (I manually review this output to confirm that I don"t want those lines) $ grep "[a-z]" > linesiwanted 

De hogyan illeszthetek egy regexet a Pythonban? Például a \w?

Megjegyzések

  • lásd stackoverflow.com/questions/164414/…
  • Ott ' hasonló vita a grep-ről az SO-ban található pythonban: stackoverflow.com/questions/1921894/grep-and-python , ez a kérdés ennek konkrétabb verziója
  • \ w = bármely szó char \ W = bármilyen szó nélküli char

Válasz

Regex a Pythonban a search vagy a match metódusok egy Match objektumot vagy None. A grep -v megfelelőhöz a következőt használhatja:

 import re for line in sys.stdin: if re.search(r"[a-z]", line) is None: sys.stdout.write(line)  

Vagy tömöbben:

 import re; sys.stdout.writelines([line for line in sys.stdin if re.search(r"[a-z]", line) is None])  

Megjegyzések

  • +1 a megjegyzés SO hivatkozása negatív megjelenésű állításokat említ, de hogy őszinte legyek, szerintem a kódrészlet sokkal értelmesebb és elegánsabb. köszönöm.
  • kiderül, hogy az [^ az] használatával illesztheti az [az] halmaz komplementerét is

Válasz

Kiderült, hogy a [^ az] szóval csak grep -v [a-z] jelentést használhatja.

Úgy használom, mint :

 #!/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  

Megjegyzések

  • Ezek nem ugyanazok. grep -v '[a-z]' azt jelenti, hogy " kizár minden olyan sort, amely egy karaktert tartalmaz a tartományban az ", de ' ve implementált grep '[^a-z]', ami azt jelenti, hogy " minden olyan sort tartalmaz, amely nem karaktert tartalmaz a az. " Ha egy sor abc123, akkor a lekérdezés tévesen kinyomtatja, mert 1 megfelel ennek a kritériumnak. A grep -v '[a-z]' nem fogja kinyomtatni ezt a sort, mert a a megfelel az elutasított feltételeknek.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük