我想在“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).+?\(
如何仅匹配第一个括号?
最佳答案
这里不需要Lookbehind。
>>> re.sub(r'(?i)(CREATE *TABLE[^(]*\()', "\\1\n", data)
注意:内联 (?i)
修饰符放置在此处,用于不区分大小写的匹配。
关于Python - 正则表达式,看看后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23787867/