[python] Regulární výraz s proměnnou

Petr Prikryl PrikrylP na skil.cz
Středa Červen 28 11:45:43 CEST 2006



Martin Jedlička
>   mám takovýto kus zdrojáku pro hledání souboru *.sch:
> 
> RegVyrazSCH = 
> re.compile(
>  r"(?P<souborsch>\d{4}-\d{1,3}-[-a-zA-Z0-9]+-\d{1,3}\.sch)")    
[...]
> potřeboval bych vědet, jak hledat soubor pomocí regulárního výrazu s 
> proměnnou, tedy když bych chtěl mít v regulárním výrazu místo \d{4}  
> nějakou proměnnou, v které by bylo čtyřmístné číslo, které se 
> bude měnit.

Vzorek pro regulární výraz je řetězec. Řetězec si můžu kdykoliv
zkonstruovat. Pokud tomu rozumím dobře, pak se má používat
dynamicky se měnící vzorek, vypadající například takto:

r"(?P<souborsch>1234-\d{1,3}-[-a-zA-Z0-9]+-\d{1,3}\.sch)"

kde 1234 je konkrétní předpona určená obsahem proměnné.
Konkrétně si na vhodném místě můžu generovat vzorek...

vzorek = r"(?P<souborsch>" + s + r"-\d{1,3}-[-a-zA-Z0-9]+-\d{1,3}\.sch)"

kde s naplním řetězcovou podobou toho čísla v očekávaném 
tvaru. Příklad:

>>> i = 5
>>> s = '%04d' % i
>>> s
'0005'

Další problém v uvedeném příkladu je ten, že se regulární
výraz kompiluje na začátku. V tomto případě se bude muset
kompilovat po každé změně vzorku -- nebo se musí použít
varianta příkazu bez kompilace.

pepr


Další informace o konferenci Python