[Tutor PyCZ] Regularni vyrazy

geon geon na post.cz
Středa Září 21 13:50:49 CEST 2005


Sladecek Lukas napsal(a):

>Zdravim,
>
>v pythonu jsem novacek a momentalne resim problem jak dosadit za text 
>ktery najdu (pomoci regularniho vyrazu) jakykoliv svuj vlastni text. 
>Cili mam nejakej log ve kterm si najdu urcita klicova slova za ktera pak 
>pridam napr. text "pokus" a tak pokracuji az do konce logu...
>
>
>import sys
>import os
>import re
>
>
>bin = "/sbin/ifconfig"
>iface = str(raw_input("\nZadejte interface: "))
>
>shell = bin+" "+iface
>opensh = os.popen(shell)
>for lineout in opensh.readlines():
>	mode = re.match('\w+\s+Link\s+encap:(?P<MODE>\w+)\s+HWaddr', lineout)
>	print mode.group('MODE')
>
>
>Tohle je jen priklad jak hledam klicove slovo (neni to navazane na zadne 
>logy). Potreboval bych jen nasmerovat jak spavne zapsat do logu presne 
>na to urcite misto a pokracovat dale (dokud je za co dopisovat)...
>  
>
Nevím jestli jsem zcela pochopil, napíši tedy čistě teoreticky, jak bych 
to řešil já:

1/ načíst soubor do jedné textové proměnné a pak
 * pomocí reg. výrazů  - funkce "nový log"=sub( pattern, repl, string[, 
count]) )
 * nebo pomocí pozice= "log".find("něco") a pak "nový log" = 
log[0:pozice] + "nový text" + log[pozice:-1].
* přídadně kombinací obou, kdy reg. výraz bude vracet pozici prvního 
písmene z hledaného výrazu a pomocí druhého postupu to zaměníš ....

2/ řetězce jsou v Pythonu neměnné, takže se nedá měnit na místě. Už jsem 
o tom taky přemýšlel, jak to udělat - snad jedině si vytvořit svojí 
vlastní třídu, a tam si to nadefinovat. Nebo sehnat nějaký modul, který 
ale bude asi řešit podobně...

Nevím jestli to je ono a jestli to stačí.... ;-)

-- 
geon
Vyjímka je pravidlo. Rekurzivní.



Další informace o konferenci Tutor