我想在“ CREATE TABLE tablename(”之后添加一个换行符,所以我的想法是匹配(的第一次出现并将其替换为(\n

源文本:

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(columna DECIMAL(28, 7)  NULL ,
columnb DECIMAL(28, 7)  KEY  NOT NULL ,
columnc DECIMAL(28, 7)  NOT NULL ,
SET("db_alias_name" = 'TEST')
;


所需结果:

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(
columna DECIMAL(28, 7)  NULL ,
columnb DECIMAL(28, 7)  KEY  NOT NULL ,
columnc DECIMAL(28, 7)  NOT NULL ,
SET("db_alias_name" = 'TEST')
;


在包含括号之前,我设法匹配了文本:

(?=CREATE\ TABLE).+?\(


如何只匹配第一个括号?

最佳答案

您无需在此处查找。

>>> re.sub(r'(?i)(CREATE *TABLE[^(]*\()', "\\1\n", data)


注意:内联(?i)修饰符放在此处,以区分大小写。

Working Demo

关于python - Python-正则表达式,往后看,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23787867/

10-12 18:42