首页 > 解决方案 > C# 正则表达式提取 SQL 条件中的字段名称和值

问题描述

考虑以下 2 个 SQL 条件。

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

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

我想使用 RegEx 打破这个 SQL,这样我就可以将表名、字段名、函数类型和字段值分成 4 个不同的部分。

例如

这是我尝试过的正则表达式(https://rubular.com/r/WGiyz0oGrooyiA),但我无法将表名、字段名和函数类型拆分为自己的组。

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

标签: regexregex-group

解决方案


在您的模式(.*?)[^=]['(]+(.*?)[')]中,您使用一个字符类['(][')]它匹配任何列出的,也可以先匹配一个开头'然后再匹配一个结尾)

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

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

正则表达式| .NET 正则表达式 (单击表选项卡)

如果您想允许更多的字符匹配,\w那么您可以使用字符类扩展它。

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


推荐阅读