[python] Problem s regularnym vyrazom

RMiklos na pss.sk RMiklos na pss.sk
Pátek Únor 2 14:00:54 CET 2007


No predsa to ide tym vyrazom od Lea, ktory som vcera prehliadol a na ktory 
ma upozornil Petr Hlavka
Takze takto to funguje:
--------------------------------------------------------------
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>[^;]*)\)")

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
--------------------------------------------------------------

dolezite je v regexpe toto:
 [^;]* - to znamena vsetky znaky okrem ; 




"Petr Prikryl" <PrikrylP na skil.cz> 
Sent by: python-bounces na py.cz
02.02.2007 13:24
Please respond to
Konference PyCZ <python na py.cz>


To
"Konference PyCZ" <python na py.cz>
cc

Subject
Re: [python] Problem s regularnym vyrazom






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í.

pepr
_______________________________________________
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 



Další informace o konferenci Python