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

如何移除Confluence表格SQL字段中的--单行注释

解决单行SQL中--注释的清理问题

问题背景

通过Atlassian API抓取Confluence表格存入DataFrame后,query字段里的SQL被pd.read_html转成了单行,常规正则(比如--.*)会误删字符串内的--内容(比如'--这是字符串内容'),需要精准清理真正的注释。

核心思路

用正则区分SQL中的字符串边界,只清除不在单/双引号内的--到行尾的注释,同时兼容SQL里的转义引号(比如'it''s a test'这种写法)。

代码实现

import re
import pandas as pd

# 模拟从Confluence读取的DataFrame
df = pd.DataFrame({
    'query': [
        "SELECT id, name -- 字段注释 FROM users WHERE status = 'active' -- 条件注释",
        "SELECT '--字符串里的--不是注释' FROM table WHERE id > 10 -- 行尾注释"
    ]
})

def clean_sql_comments(sql):
    # 正则规则:匹配字符串内容,或匹配--注释,只替换注释部分
    pattern = r"""
        (?:['"][^'"]*(?:''|""[^'"]*)*['"])  # 匹配单/双引号包裹的字符串(含转义引号)
        |
        (--.*$)  # 匹配--开头到行尾的注释
    """
    # 只替换捕获到的注释分组,字符串部分原样保留
    return re.sub(pattern, lambda m: m.group(1) if m.group(1) else '', sql, flags=re.VERBOSE)

# 批量清理query列
df['query'] = df['query'].apply(clean_sql_comments)

# 导出为JSON
df.to_json('cleaned_queries.json', orient='records', indent=2)

效果验证

  • 原SQL:SELECT id, name -- 字段注释 FROM users WHERE status = 'active' -- 条件注释
    清理后:SELECT id, name FROM users WHERE status = 'active'
  • 原SQL:SELECT '--字符串里的--不是注释' FROM table WHERE id > 10 -- 行尾注释
    清理后:SELECT '--字符串里的--不是注释' FROM table WHERE id > 10

扩展支持(含/* */注释)

如果SQL里还有多行注释,可修改正则同时匹配两种注释:

pattern = r"""
    (?:['"][^'"]*(?:''|""[^'"]*)*['"])  # 匹配字符串
    |
    (/\*.*?\*/)  # 匹配/* */多行注释
    |
    (--.*$)  # 匹配--单行注释
"""

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 06:43:17