正则表达式通过别名获取逗号分隔列列表的信息

时间:2015-02-05 16:10:34

标签: c# regex

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

SELECT
  text
FROM
  bla

否则只有在没有"文字":

的情况下才能匹配信息
SELECT
  bla.t as text
FROM
  bla

SELECT
  t as text
FROM
  bla

所以我有一个小例子,我突出了应该匹配的内容:

选择文字 FROM

选择 bla.t as text FROM

选择 t 文本FROM

SELECT bla.tatext FROM

选择 bla。文字FROM

选择bla.t作为tatext FROM

选择 bla.t as text FROM

选择bla.t作为tatext, bla.t作为文本FROM

文字 FROM(SELECT bla。 text FROM)为bla

,'文本' FROM

[text] FROM

bla.t as ' text',

只需复制此示例并尝试获取所有突出显示。作为比赛

祝你好运!

3 个答案:

答案 0 :(得分:2)

我不确定我理解这个问题。这听起来就像你需要的一样

,([^,]*?text),

这将匹配逗号,0个或更多以逗号text结尾的非逗号字符和另一个逗号。由于只有逗号之间的文本在括号中,因此将捕获所有文本。

如果您不想在比赛中加入text,可以

,([^,]*?)text,

或者,如果您不想使用捕获并坚持外观:

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

详细信息取决于您使用的正则表达式语言。

答案 1 :(得分:0)

使用此模式

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

答案 2 :(得分:0)

我也不是专家,但这是否符合您的要求?

文本(?=)

在你想要的关键词之后使用正向前瞻(?=,)。

如果您只想在逗号之间使用关键字,那么您可以使用我们的头像并向后看:

(小于?=,\ S *)文本(?=)