正则表达式将 SQL INSERT 语句转换为键值字典

Posted

技术标签:

【中文标题】正则表达式将 SQL INSERT 语句转换为键值字典【英文标题】:Regex to convert SQL INSERT statement to dictionary of key,value 【发布时间】:2018-10-19 11:58:16 【问题描述】:

我需要一个正则表达式来将 SQL INSERT 语句转换为键值字典。该值可以是一个复杂的公式。 我使用的策略是 C# 组和捕获。

例如

A->RIC_MIGRATION

B->RIC_MIGRATION

C-> AND ( ( IN ( CurrencyStr , "AUD","NZD","EUR" ) ) , AND ( 1, AND ( 1, AND ( ( FeedToPXE2 = "1") , ( RIC_CRED_ValueSource = "1 ") , ( FeedToPXE1 = "0") , ( IN (InsType , "A","C","T" ) ) , )) , ) , )

我已经尝试了以下

var insertRegex = @"INSERT INTO (?[A-Z_]*)\(((?[""A-Za-z_]+),?)*\) VALUES\(((?'[^']+ '),?)*\)"; var inputString=@"INSERT INTO TABLEA(A,""B"",C,D,E,F,G,H,I,J,K,L,M) VALUES('RIC_MIGRATION','RIC_MIGRATION',' AND ( ( IN ( CurrencyStr , ""AUD"",""NZD"",""EUR"" ) ) , AND ( 1, AND ( 1, AND ( ( FeedToPXE2 = ""1"") , ( RIC_CRED_ValueSource = ""1"") , ( FeedToPXE1 = ""0"") , ( IN (InsType , ""A"",""C"",""T"" ) , )) , ) , )', '','','EUR.CM_INSTRUMENT.REFDATA.INSTRUMENTGROUP_PXECRED_RIC_MIGRATION','1','1','0','','','0','No')"; var regMatch = Regex.Match(inputString, insertRegex);

但它不匹配。

我做错了什么?

感谢观看

【问题讨论】:

您使用的正则表达式对我来说看起来既复杂又可怕。您是否有机会直接转储 SQL 数据并从例如平面文件构建字典? 我在你的正则表达式中闻到语法错误。 发现错误。正确的正则表达式是 var insertRegex = @"INSERT INTO (?[A-Z_]*)(((?[""A-Za-z_] +),?)*) 值(((?'[^']*'),?)*)"; (1) 你真正想解决什么问题?这对我来说似乎是一个潜在的 XY 问题。 (2)你能给出一套完整的要求吗?您显然只是在尝试匹配正则表达式的特定子集,那么您能否明确说明在您的问题背景下构成“完整”解决方案的确切内容? (3)如果您找到了答案,请将其作为答案发布!不作为评论。
【参考方案1】:

正确的正则表达式是

var insertRegex = @"INSERT INTO (?[A-Z_]*)\(((?[""A-Za-z_]+),?)*\) 值\(((?'[^']* '),?)*\)";

处理空字符串值''

【讨论】:

以上是关于正则表达式将 SQL INSERT 语句转换为键值字典的主要内容,如果未能解决你的问题,请参考以下文章

将NSString转换为键值对

将 json 格式的键值对转换为以符号为键的 ruby​​ 哈希的最佳方法是啥?

将 json 字典列转换为键值对行(Redshift+Postgresql)

将 XML 字符串 API 响应转换为键值对象 C#

我将使用啥代码将类似 SQL 的表达式即时转换为正则表达式?

Pyspark 将行数据转换为键值对