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ánybana
–z
", de ' ve implementáltgrep '[^a-z]'
, ami azt jelenti, hogy " minden olyan sort tartalmaz, amely nem karaktert tartalmaz aa
–z
. " Ha egy sorabc123
, akkor a lekérdezés tévesen kinyomtatja, mert1
megfelel ennek a kritériumnak. Agrep -v '[a-z]'
nem fogja kinyomtatni ezt a sort, mert aa
megfelel az elutasított feltételeknek.