Python-Regex,回头看
我想在“CREATE TABLE tablename”()之后添加一个换行符,因此我的想法是匹配第一次出现的Python-Regex,回头看,python,regex,Python,Regex,我想在“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"
(
),并将其替换为(\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)
修饰符,用于不区分大小写的匹配
您的演示与表名、创建表后的所有内容都匹配,直到包含(.I需要其他内容,如上所述……我知道我的工作原理,它还为您提供准确的“预期结果”如您所问。您检查了演示了吗?好的,您匹配了所有内容,并将匹配的字符串替换为自身加上一个换行符。这很有效,谢谢。是的,\0
引用了整个匹配,然后我们添加了\n
。如果有帮助,请接受:)什么意思(?.i)for?使其不区分大小写。您可能也应该在我的示例中使用此选项:)
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')
;
>>> re.sub(r'(?i)(CREATE *TABLE[^(]*\()', "\\1\n", data)