Python - 正则表达式,看看后面

标签 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" = '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) 修饰符放置在此处,用于不区分大小写的匹配。

Working Demo

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

相关文章:

python - 使用 Pandas ,我如何比较两个数据帧的两列之间的值并将它们推送到新的数据帧?

c++ - 如何检查 c++11 std::regex_replace 是否成功?

java io - 正则表达式不起作用 - 为什么

python - 如何根据pandas中其他列表的值获取不连续列表?

python - 在python中使相对路径成为绝对路径

python - PIL : Convert RGB image to a specific 8-bit palette?

python - 从 Python 中的 url 读取 gzip csv 时出错 : "_csv.Error: line contains NULL byte"

javascript - JS 正则表达式 : simple match with optional parts

正则表达式匹配澳大利亚商业号码 (ABN)

python - pandas 列中 url 的匹配模式