To som skusal ale neni to tak jednoduche. Toto ------------------------------------------------------------------------------ import sys,re sql_statement='''CREATE TABLE IBPDDB071/R004660V (PERSONNR DECIMAL (10, 0) NOT NULL WITH DEFAULT, LFDNR1 DECIMAL (3, 0) NOT NULL WITH DEFAULT, VOTYP CHARACTER (1) NOT NULL WITH DEFAULT, BSSTAMMNR DECIMAL (7, 0) NOT NULL WITH DEFAULT,BSVNR DECIMAL (2, 0) NOT NULL WITH DEFAULT ); Label on IBPDDB071/R004660V(PERSONNR IS 'PERSONNR', LFDNR1 IS 'LFDNR1', VOTYP IS 'VOTYP', BSSTAMMNR IS 'BSSTAMMNR', BSVNR IS 'BSVNR');''' 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*")
result=regexp_sql_create.search(sql_statement) if result == None: # CREATE TABLE statement not valid ! print "SQL CREATE TABLE statement is not valid !!!" sys.exit() else: # Parse data from RegExp library=result.group('library') print "Library=%s" % library table=result.group('file') print "Table=%s" %table table_field_def=result.group('tbl_field_def') print "Field Definitions=%s" % table_field_def ------------------------------------------------------------------------------ da vysledok Field Definitions=PERSONNR DECIMAL (10, 0 co je zle - vsetko ostatne to urezalo -pretoze zatvorky ')' su aj v definiciach poli "Petr Prikryl" <[EMAIL PROTECTED]> Sent by: [EMAIL PROTECTED] 01.02.2007 15:22 Please respond to Konference PyCZ <python@py.cz> To "Konference PyCZ" <python@py.cz> cc Subject Re: [python] Problem s regularnym vyrazom 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 _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python Mgr. Ing. Roman MIKLÓŠ Prvá stavebná sporiteľňa a.s. Bajkalská 30, P. O. Box 48 829 48 Bratislava 25 Tel.: +421/ 2 / 582 31 174 Fax: +421/ 2 / 582 31 109 _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python