正则表达式按逗号分隔-不在括号或单引号内

时间:2019-01-02 14:30:29

标签: c# sql .net regex split

我尝试将以下SQL语句拆分为几列:

select 
    count(rtnotes.keyno) as value,
    ent.company as label, 
    'j-ChartDrillDown-406,'+CAST(ENT.ENTID AS CHAR(10)) AS link, 
    dateadd(week, datediff(wk, 0, dateadd(wk,-5,getdate())), -1) as test
    ...

我希望将其拆分为select语句中的4列:

  1. count(rtnotes.keyno) as value
  2. ent.company as label
  3. 'j-ChartDrillDown-406,'+CAST(ENT.ENTID AS CHAR(10)) AS link
  4. dateadd(week, datediff(wk, 0, dateadd(wk,-5,getdate())), -1) as test

我已经可以使用引号将引号内的逗号分隔开:

,(?=(?:[^']*'[^']*')*[^']*$)

但我还需要忽略括号内的逗号(在这种情况下,由于dateadd和datediff导致嵌套括号)

https://regex101.com/r/UUNUF9/1/

2 个答案:

答案 0 :(得分:0)

(评论太久了)

除非您知道要解析的每个查询的嵌套括号的确切数量,否则您将无法。基本上是因为它与parsing HTML using Regular Expressions相同。

原因是这种情况下的括号类似于HTML的打开和关闭标签。此外,您必须确保处理SELECT ':)' AS SmileyCAST(')' AS NCHAR(1))之类的情况,这些情况的括号中可能包含字符串值,这会给您带来很多麻烦。

但是,像SQL Parser这样的项目可能会帮助您实现所需的目标。

答案 1 :(得分:0)

这是您需要的正则表达式。

正则表达式:'[^ select] [^ \ s]。+ [()]?[^,| \ s]'

例如,关于您的数据,请点击链接。 https://regex101.com/r/Zhk1JP/2