C#正则表达式可在SQL条件中提取字段名称和值

时间:2019-04-23 21:01:47

标签: regex regex-group

请考虑以下2个SQL条件。

1。)AssetView.[PROPTYPE] NOT IN ('B15/30','SFD','SFA')

2。)AssetView.[FICO] IN (500,600,700)

我想使用RegEx打破此SQL,以便可以将表名称,字段名称,函数类型和字段值分为4个不同的部分。

例如

  • 表名称-AssetView
  • 字段名称-PROPTYPE
  • 功能-NOT IN
  • 字段值(在一起或分开):B15 / 30,SFD,SFA

这是我尝试过的正则表达式(https://rubular.com/r/WGiyz0oGrooyiA),但是我无法将TableName,Field Name和Function类型拆分为自己的组。

(.*?)[^=]['(]+(.*?)[')]

1 个答案:

答案 0 :(得分:1)

在模式(.*?)[^=]['(]+(.*?)[')]中,您使用字符类['(][')],它们与列出的任何字符相匹配,并且还可以首先与开头'相匹配,然后与关闭)

对于示例数据,您可以使用:

(\w+)\.\[(\w+)\] +(\w+(?: \w+)*) +\(([^)\n]+)\)
  • (\w+)在组1中捕获1个以上的字符字符
  • \.匹配一个点
  • \[(\w+)\] +在第2组和1+个空格的方括号之间捕获1个以上的字符字符
  • (\w+(?: \w+)*) +捕获1个以上的字符字符,然后重复0+次匹配一个空格的字符,并重复第3组和1+个空格中的1+个字符字符
  • \(([^)\n]+)\)捕获1+次而不是第4组中的右括号或右括号之间的换行符

Rubular regex | .NET regex (单击“表格”标签)

如果要匹配的字符数多于\w,则可以使用字符类扩展该字符数。

例如,如果您还想允许使用连字符和空格,请使用[\w-]+,或者如果要匹配所有括号之间的字符,则可以使用否定字符类,例如\[([^\]]+)\] < / p>