我有这个字符串:
"(Id=7) OR (Id=6) OR (Id=8)"
从上面的字符串我怎样才能创建这样的数组或列表:
"Id=6"
"Id=7"
"Id=8"
答案 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
}
}