使用正则表达式使用.Net从SQL语句中提取特定的select子句

使用正则表达式使用.Net从SQL语句中提取特定的select子句,.net,regex,.net,Regex,我试图用正则表达式返回sql语句的一部分。例如: a.column1, (select b.column1, b.column2, etc) as column2, a.column3 (select c.column1, etc) as column4, (select d.column1, d.column2, d.column3, etc) as column5, a.column6, (select e.column1, etc) as column7 我希望给定字符串(如“co

我试图用正则表达式返回sql语句的一部分。例如:

a.column1,
(select b.column1, 
b.column2, etc) as column2,
a.column3
(select c.column1, etc) as column4,
(select d.column1, 
d.column2, 
d.column3, etc) as column5,
a.column6,
(select e.column1, etc) as column7
我希望给定字符串(如“column5”)返回生成column5“select d.column1”等的select语句。我尝试了以下方法:

\(((?:.|\n)*?)\)(?=\s{1,}AS\scolumn5)

但它将select语句从第2列一直返回到第5列。是否要使我的正则表达式语句变为惰性语句,并且只返回紧靠“column5”之前的select语句?

您可以使用以下正则表达式:

@"^(?<select>\(select[^)]*\))\sas\scolumn5,?$"

您可以使用以下命令访问
'select'
组:
Match[“select”]。值

您的意思是说“…仅返回紧接在”第2列之前的select语句吗“?另外,看起来您正在尝试匹配当前正则表达式中的
column5
,而
column2
不在其中…”如果您询问给定示例正则表达式的预期结果,我希望该语句在第5列之前返回select语句。如果我将column5替换为column4,它应该在column4之前返回select语句,这可能是因为我不理解问题所在,但为什么不使用类似于
^.*?column5
?(假设语句不跨多行)@certainperformance。是,我当前的正则表达式语句正在查找第5列之前的select语句。
new Regex(@"^(?<select>\(select[^)]*\))\sas\scolumn5,?$", RegexOptions.IgnoreCase | RegexOptions.Multiline);