-1

我有一个 sql 文本,其中包括

"Select * from Table Where [PARAM1] = [PARAM2] ..."

我想在要列出的"[" "]"标签之间获取列表。

我该怎么做 ?

4

7 回答 7

4

您可以使用 LINQ

string str = "Select * from Table Where [PARAM1] = [PARAM2] ...";
string[] Array = str.Split().Where(r=> r.StartsWith("[") && r.EndsWith("]"))
                    .Select(r=> r.Trim('[',']'))
                    .ToArray();
于 2013-01-17T09:14:07.950 回答
2

您可以尝试使用正则表达式和一些 LINQ:

Regex t = new Regex(@"\[([^]]*)\]");
List<String> parameters = t.Matches(input_string).Cast<Match>().Select(a => a.Groups[1].ToString()).ToList();

这将导致一个包含两个匹配项的列表PARAM1PARAM2

于 2013-01-17T09:12:12.690 回答
2

使用这个片段

string strRegex = @"\[(.*?)\]";
RegexOptions myRegexOptions = RegexOptions.IgnoreCase;
Regex myRegex = new Regex(strRegex, myRegexOptions);
string strTargetString = @"Select * from Table Where [PARAM1] = [PARAM2] ...";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
   // myMatch.Groups[0] - your string
}
于 2013-01-17T09:15:24.063 回答
1

你也可以做

List<string> matches=Regex.Matches(@"(?<=\[)[^\[\]]*(?=\])")
                          .Cast<Match>()
                          .Select(x=>x.Value)
                          .ToList();
于 2013-01-17T09:19:49.177 回答
1

这是您需要的:

Regex t = new Regex(@"\[(.*?)\]");

string str = @"Select * from Table Where [PARAM1] = [PARAM2] ...";

foreach (Match myMatch in myRegex.Matches(str))
{
   // myMatch.Groups[0] and so on....
}

现场演示

于 2013-01-17T09:20:41.287 回答
0

要将 MatchCollection 转换为 List 使用:

List<Match> myMatches = Regex.Matches("bla", @"\[[^]]*)\]").Cast<Match>.toList();
于 2013-01-17T09:14:41.220 回答
0

您可以尝试使用这个正则表达式:

Regex regex = new Regex(@"\[.*?\]");
var parameters = regex.Matches(sqlQueryString);
于 2013-01-17T09:15:14.727 回答