从列表创建数组的优雅方法是什么?

时间:2016-01-20 08:31:43

标签: c# .net regex

我有这个字符串:

"(Id=7) OR (Id=6) OR (Id=8)"
从上面的字符串

我怎样才能创建这样的数组或列表:

"Id=6"
"Id=7"
"Id=8"

3 个答案:

答案 0 :(得分:3)

不使用正则表达式,但使用一些Linq,你可以写

string test = "(Id=7) OR (Id=6) OR (Id=8)";
var result = test
    .Split(new string[] { " OR "}, StringSplitOptions.None)
    .Select(x => x = x.Trim('(', ')'))
    .ToList();

如果您还需要考虑AND运算符的存在或AND / OR与条件之间的可变数量的空格,那么您可以将代码更改为此

string test = "(Id=7) OR (Id=6) OR (Id=8)";
var result = test
    .Split(new string[] { "OR", "AND"}, StringSplitOptions.None)
    .Select(x => x = x.Trim('(', ')', ' '))
    .ToList();

答案 1 :(得分:3)

我建议结合正则表达式和LINQ权限:

var result = Regex.Matches(input, @"\(([^()]+)\)")
       .Cast<Match>()
       .Select(p => p.Groups[1].Value)
       .ToList();

\(([^()]+)\)模式(see its demo)将匹配所有(...)字符串,并使用第1组(未转义的(...)内部)构建最终列表。

答案 2 :(得分:1)

只需抓住比赛

(?<=\()[^)]*(?=\))

参见演示。

https://regex101.com/r/iJ7bT6/18

string strRegex = @"(?<=\()[^)]*(?=\))";
Regex myRegex = new Regex(strRegex, RegexOptions.Multiline);
string strTargetString = @"(Id=7) OR (Id=6) OR (Id=8)";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
   if (myMatch.Success)
   {
     // Add your code here
  }
}