You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则匹配SQL中首次出现的数据库名结果异常求助

修正正则表达式提取首次出现的数据库名

原正则使用贪婪匹配的(.*),会从第一个匹配起始位置一直匹配到最后一个as db_name前的内容,导致捕获大量无关文本。只需将正则改为非贪婪匹配并明确引号边界,即可精准捕获首次出现的数据库名。

修正后的代码

import re

sql = 'select col1, col2, "base" as db_name, "employee" as table_name from base.employee where id is not NULL union select col1, col2, "base" as db_name, "employee" as table_name from base.employee where ts is not NULL'

# 使用非贪婪匹配.*?,并限定引号边界
result_dbname = re.search(',?"(.*?)" as db_name', sql)

if result_dbname:
    db_name = result_dbname.group(1)
    print(db_name)  # 输出: base

关键说明

  • .*?:非贪婪匹配模式,遇到第一个闭合的双引号就停止匹配,确保只捕获首次出现的数据库名字符串
  • ,?:兼容字段前可能存在逗号的情况(比如SQL中字段列表的分隔)
  • 增加if result_dbname判断,避免正则匹配失败时触发AttributeError

拓展:提取首次出现的表名

用同样的逻辑可以提取表名:

result_tablename = re.search(',?"(.*?)" as table_name', sql)
if result_tablename:
    table_name = result_tablename.group(1)
    print(table_name)  # 输出: employee

内容的提问来源于stack exchange,提问作者Nats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:52:55