我有一個文件,其中包括SQL-CREATE-TABLE命令conatains。 我想將所有SQL-CREATE-TABLE命令寫入一個列表(尚未實現),每個命令都在一個單獨的列表條目中。Python - 正則表達式,多個匹配
我的問題是,正則表達式只返回第一個匹配,但應該有更多。
源文件:
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
我的腳本只返回第一個匹配:
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')
腳本:
# -*- 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()
你能也許會告訴我,什麼是錯的嗎?
您可能會受益於使用解析器而不是依靠r世俗表達。 https://github.com/andialbrecht/sqlparse –
感謝提示 – royskatt