J'ai un fichier qui contient entre autres des commandes SQL-CREATE-TABLE. Je veux écrire toutes les commandes SQL-CREATE-TABLE dans une liste (pas encore implémentée), chaque commande dans une entrée de liste séparée.Python - Regex, correspondance multiple
Mon problème est, que l'expression régulière ne renvoie que la première correspondance, mais il devrait y avoir plus.
Fichier source:
abcd
something
CREATE TABLE schema.test1(attribute1 DECIMAL(28, 7) NULL ,
ATTRIBUTE2 DECIMAL(28, 7) KEY NOT NULL ,
ATTRIBUTE3 DECIMAL(28, 7) NOT NULL ,
SET("db_alias_name" = 'TEST')
;
efgh
something else
CREATE TABLE schema.test2(attribute1 DECIMAL(28, 7) NULL ,
ATTRIBUTE2 DECIMAL(28, 7) KEY NOT NULL ,
ATTRIBUTE3 DECIMAL(28, 7) NOT NULL ,
SET("db_alias_name" = 'TEST')
;
something else
CREATE TABLE schema.test3(attribute1 DECIMAL(28, 7) NULL ,
ATTRIBUTE2 DECIMAL(28, 7) KEY NOT NULL ,
ATTRIBUTE3 DECIMAL(28, 7) NOT NULL ,
SET("db_alias_name" = 'TEST')
;
something else
12346
higkl
Mon script ne retourne que le premier match:
CREATE TABLE schema.test1(attribute1 DECIMAL(28, 7) NULL ,
ATTRIBUTE2 DECIMAL(28, 7) KEY NOT NULL ,
ATTRIBUTE3 DECIMAL(28, 7) NOT NULL ,
SET("db_alias_name" = 'TEST')
Script:
# -*- coding: utf-8 -*-
import os
import re
create_table_parts = []
atlfile = 'example.txt'
data = ''
def read_file(afile):
with open(afile) as atl:
text = atl.read()
return text
data = read_file(atlfile)
data_utf8 = unicode(data, "utf-8")
round1 = re.search(r"(CREATE\sTABLE).+?(?=;)", data_utf8, re.MULTILINE|re.DOTALL)
print round1.group()
Pourriez-vous peut-être me dire, quel est le problème ici?
Vous pourriez bénéficier de l'utilisation d'un analyseur au lieu de compter sur r expressions egulaires. https://github.com/andialbrecht/sqlparse –
Merci pour l'indice – royskatt