在AWS Lambda中使用Python re.sub移除行尾括号的问题
解决Python正则替换行尾')'无效的问题
我在将Hive DDL转换为Redshift DDL时,想用Python的re.sub替换行尾的),但尝试了几种写法都没效果。
输入示例
"ci_stage" : "varchar(30)) "target_manager_id" : "bigint)
期望输出
"ci_stage" : "varchar(30)" "target_manager_id" : "bigint"
我试过的代码
modified_line113 = re.sub('[)]$','"', modified_line112) modified_line113 = re.sub(r"\)$", '"', modified_line112)
解决方案
问题核心是行尾大概率藏着看不见的换行符或空白字符,正则里的$默认匹配换行符前的位置,但如果)后面还有空白/换行,)$就匹配不到目标字符。
最简解决方法有两种:
- 正则写法(推荐):匹配行尾的
),同时忽略后面的任意空白字符:
modified_line113 = re.sub(r"\)\s*$", '"', modified_line112)
\s*会匹配0个或多个空白字符(空格、制表符、换行符都算),确保能精准定位到行尾的)。
- 字符串原生方法:如果不想用正则,也可以直接用字符串处理:
# 先去掉行尾所有空白,再判断最后一个字符是否是')' stripped_line = modified_line112.rstrip() modified_line113 = stripped_line[:-1] + '"' if stripped_line.endswith(')') else stripped_line
内容的提问来源于stack exchange,提问作者akki_hs
相关产品推荐
相关产品推荐

