[python] Problem s regularnym vyrazom

Leos Pol leos na radiante-corp.com
Pátek Únor 2 14:19:35 CET 2007


Petr Prikryl wrote:
> RMiklos na ...sk
>   
>> To som skusal ale neni to tak jednoduche. 
>> --------------------------------------------------------------
>> [...]'''CREATE TABLE IBPDDB071/R004660V
>> (PERSONNR    DECIMAL     (10, 0)    NOT NULL WITH DEFAULT, 
>> LFDNR1 DECIMAL (3, 0) [...] );'''
>> 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*")
>>     
>
> No jasně. Když jsou vevnitř závorky, tak to nemůže
> fungovat. Problém je principiální. Regulární výrazy
> obecně nemohou popisovat řetězce jazyků, které obsahují
> párové struktury. Možná se dají zpracovat nějaké speciální
> případy na základě dalších znalostí.
>
>   
Presne tak. V tomhle pripade jsem si pohraval s myslenkou, ktera by se 
dala zapsat matematicky asi takhle (pouze pro retezec v zavorkach):

    A = {a-zA-Z0-9_, }
    B = {0-9, }
    C = (B*)
    L = (A*+C*)

Bohuzel, kdyz na to ted koukam, tak jazyk L neni regularni. Presto si 
ale myslim, ze tento jazyk lze popsat gramatikou popr. automatem. Jestli 
se pletu, opravte me prosim.

Leo

-- 
----
Leos Pol
SW Engineer
Radiante Corp.

If it can be imagined,
we can implement it



Další informace o konferenci Python