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

如何用正则提取`item_option`插入语句中引号内的目标内容?

解决SQL单引号内容提取的正则方案

要精准提取item_option表INSERT语句后的所有单引号内容,同时排除item表的部分,直接用下面的正则就能搞定:

正则表达式

(?<=INSERT INTO `item_option` \(id, type, name\) VALUES).*?('(?:''|[^'])*')

关键细节解释

  • 定位目标位置:(?<=INSERT INTO item_option \(id, type, name\) VALUES) 是正向后发断言,确保只在目标INSERT语句结束后开始匹配,完全跳过前面item表的内容。
  • 处理多行SQL:搭配正则的DOTALL模式(比如Python里的re.DOTALL),让.能匹配换行符,适配换行排版的SQL代码。
  • 正确捕获转义单引号:'(?:''|[^'])*' 用来匹配单引号内的内容——''匹配SQL里转义的单引号,[^']匹配非单引号字符,避免把转义的单引号当成结束符。

实际使用示例(Python)

import re

# 示例SQL代码
sql_content = """
INSERT INTO `item` (`id`, `name`) VALUES (1, 'Apple'), (2, 'Banana');
INSERT INTO `item_option` (`id`, `type`, `name`) VALUES (1, 'size', 'Large'), (2, 'color', 'Red'), (3, 'size', 'Small');
INSERT INTO `item` (`id`, `name`) VALUES (3, 'Orange');
"""

# 编译正则并匹配
pattern = r"(?<=INSERT INTO `item_option` \(id, type, name\) VALUES).*?('(?:''|[^'])*')"
result = re.findall(pattern, sql_content, re.DOTALL)

# 输出结果:["'size'", "'Large'", "'color'", "'Red'", "'size'", "'Small'"]
print(result)

如果你的SQL里字段名前后有空格(比如( id , type , name )),只需在正则的括号内加上\s*适配,比如:

(?<=INSERT INTO `item_option` \(id\s*,\s*type\s*,\s*name\) VALUES).*?('(?:''|[^'])*')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:57:17