[python] Problem s regularnym vyrazom

Petr Prikryl PrikrylP na skil.cz
Čtvrtek Únor 1 15:22:14 CET 2007


Roman MIKLÓŠ
> Extrahujem datove polia tabulky cez regularny vyraz takto:
> [...]
> regexp_sql_create=\
> re.compile(r"^\s*CREATE\s+TABLE\s+"
>            r"(?P<library>[A-Z0-9]+)\s*[/.]\s*(?P<file>[A-Z0-9]+)\s*"
>            r"\((?P<tbl_field_def>.*)\)\s*")
> [...]
> Toto by fungovalo, az na to ze SQL-skript je vygenerovany a 
> okrem CREATE TABLE (...); moze obsahovat aj LABEL ON (...);
> [...]
> Vtedy mi horeuvedeny regexp matchuje (pretoze je greedy) 
> vsetko, takze rozpozna vsetko od 'CREATE TABLE(' az po 
> poslednu zatvorku ')' stringu t.j. '..); LABEL ON(..' 
> ale ja potrebujem aby rozpoznal len to co je v 
> tele CREATE TABLE. 
> 
> Vie mi niekto poradit ako napisat ten regularny vyraz 
> aby robil co potrebujem?

Stačí upravit ten regulární výraz tak, aby nebyl greedy,
tj. aby zastavil před první zavírací závorkou. K tomu stačí
modifikovat sekvenci '.*' na posledním řádku na '.*?'.
Otazník za opakovcím symbolem zajistí nežravou interpretaci.

pepr


Další informace o konferenci Python