[python] Problem s regularnym vyrazom

Petr Hlávka petrhlavka na gmail.com
Čtvrtek Únor 1 17:44:05 CET 2007


Dobry den,

vsak uprava s [^;] nerika, ze statement musi koncit strednikem, pouze
reguralni vyraz nepreskoci pres strednik na dalsi prikaz LABEL ON...

  S pozdravem Petr Hlavka.

On 2/1/07, RMiklos na pss.sk <RMiklos na pss.sk> wrote:
> No ano, ale ak tam je iba jedno CREATE TABLE(...) tak to nemusi byt
> ukoncene so strednikom ;
>
> Ja som zatial obisiel ten regularny vyraz tak, ze este ked vsetko
> nacitavam do stringu, preventivne hladam prvy strednik zlava a ak tam je,
> tak vsetko od neho napravo odstranim
>
>     idx_1st_semicolon=sql_statement.find(';')
>     if idx_1st_semicolon > 0:
>       sql_statement=sql_statement[:idx_1st_semicolon]
>
> No aj tak by ma zaujimal ten problem s regularnym vyrazom, pretoze som
> skusal aj non greedy ale to pracuje uplne zle.
>
>
>
>
> Leos Pol <leos na radiante-corp.com>
> Sent by: python-bounces na py.cz
> 01.02.2007 15:15
> Please respond to
> Konference PyCZ <python na py.cz>
>
>
> To
> Konference PyCZ <python na py.cz>
> cc
>
> Subject
> Re: [python] Problem s regularnym vyrazom
>
>
>
>
>
>
> Zdravim,
>
> ja bych to asi nelamal pres koleno a udelal bych tohle:
>
> 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>[^;]*)\)")
>
> tzn: Kazde sql query je ukonceno strednikem.....
>
> Leo
>
> RMiklos na pss.sk wrote:
> > Rad by som tymto oslovil odbornikov na regularne vyrazy.
> >
> > Extrahujem datove polia tabulky cez regularny vyraz takto:
> > --------------------------- skript ---------------------------
> > 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 );'''
> > 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
> > ------------------------ konec skriptu ------------------------
> >
> > Potom definicie dat. poli dalej pracovavam.
> > Toto by fungovalo, az na to ze SQL-skript je vygenerovany a okrem CREATE
>
> > TABLE (...); moze obsahovat aj LABEL ON (...);
> > takze moze vyzerat takto:
> >
> > 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');'''
> >
> > 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?
> > 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 na py.cz
> > http://www.py.cz/mailman/listinfo/python
> >
>
>
> --
> ----
> Leos Pol
> SW Engineer
> Radiante Corp.
>
> If it can be imagined,
> we can implement it
>
> _______________________________________________
> Python mailing list
> Python na 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 na py.cz
> http://www.py.cz/mailman/listinfo/python
>


Daląí informace o konferenci Python