[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