Regex通过别名获取逗号分隔列列表的信息



最初的问题是确定原始列来自逗号分隔的列列表中的哪些列,这些列可以是别名。此列表不在SQL中的任何选择块中,因为语法几乎相同。我正在使用MSSQL。我的Regex应该使用C#代码!所以我开始匹配列之间的内容。然后我指定内容的末尾应该是用括号括起来的类似"列"的内容(或者"当内容多于乘空格时")。而这个结局必须是准确的。因此,bla作为blacolumn,不是我试图获得的有效匹配(get意味着在这种情况下读取匹配值以进行更多编辑)。只有当没有附加信息时,值的匹配才应该是值本身:

SELECT
  text
FROM
  bla

否则,只有信息应该匹配,而没有"文本":

SELECT
  bla.t as text
FROM
  bla

SELECT
  t as text
FROM
  bla

所以我得到了一个小例子,我强调了应该匹配的内容:

从中选择文本

从中选择bla.t作为文本

从中选择t作为文本

从中选择bla.tatext

选择bla来自的文本

从中选择bla.t作为statext

从中选择bla.t作为文本

从中选择bla.t作为statext,bla.t为text

textFROM(选择bla.text FROM)作为bla

,来自的"文本"

[text]来自

bla.t为"文本",

只要复制这个例子,试着把所有的东西都弄清楚。与匹配

祝你好运!

我不确定我是否理解这个问题。听起来你只需要

,([^,]*?text),

这将匹配一个逗号、0个或多个以text结尾的非逗号字符和另一个逗号。由于只有逗号之间的文本在括号中,所以这就是将要捕获的全部内容。

如果你不想在比赛中包括text,你可以做

,([^,]*?)text,

或者,如果你不想使用捕获并坚持环视:

(?<=,)(.*?)(?=text,)

详细信息将取决于您正在使用的regex语言。

使用此模式

(?<=,)(.*?)(?<=text)(?=,)

我也不是专家,但这能满足你的需求吗?

text(?=,)

这在你想要的关键词后面使用了一个正向前瞻(?=,)。

如果你只想要逗号之间的关键词,你可以给我们一个lookhead和lookback:

(?<=,\s*)文本(?=,)

最新更新