我有一个 sql 文本,其中包括
"Select * from Table Where [PARAM1] = [PARAM2] ..."
我想在要列出的"[" "]"
标签之间获取列表。
我该怎么做 ?
您可以使用 LINQ
string str = "Select * from Table Where [PARAM1] = [PARAM2] ...";
string[] Array = str.Split().Where(r=> r.StartsWith("[") && r.EndsWith("]"))
.Select(r=> r.Trim('[',']'))
.ToArray();
您可以尝试使用正则表达式和一些 LINQ:
Regex t = new Regex(@"\[([^]]*)\]");
List<String> parameters = t.Matches(input_string).Cast<Match>().Select(a => a.Groups[1].ToString()).ToList();
这将导致一个包含两个匹配项的列表PARAM1
和PARAM2
使用这个片段
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
}
你也可以做
List<string> matches=Regex.Matches(@"(?<=\[)[^\[\]]*(?=\])")
.Cast<Match>()
.Select(x=>x.Value)
.ToList();
这是您需要的:
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....
}
要将 MatchCollection 转换为 List 使用:
List<Match> myMatches = Regex.Matches("bla", @"\[[^]]*)\]").Cast<Match>.toList();
您可以尝试使用这个正则表达式:
Regex regex = new Regex(@"\[.*?\]");
var parameters = regex.Matches(sqlQueryString);