在C#中获取括号中字符之间的字符串

时间:2018-10-12 12:56:58

标签: c# string

我有一个字符串,看起来像一个方法:

"method(arg1,arg2,arg3);"

我需要以字符串的形式获取所有参数,即:

"arg1"
"arg2"
"arg3"

我该怎么办?我尝试了以下代码:

var input = LineText;
var split = input.Split(',');
var result = String.Join(",", split.Skip(1).Take(split.Length - 2));
var split2 = input.Split(',');
var result2 = String.Join(",", split.Skip(2).Take(split.Length - 2));
var split3 = input.Split(',');
var result3 = String.Join(",", split.Skip(3).Take(split.Length - 2));

但是它不能正常工作。

我不需要正则表达式。

3 个答案:

答案 0 :(得分:0)

您可以使用正则表达式或带有此简单字符串的纯字符串方法。首先用String.IndexOf找到括号的开头和结尾。然后使用SubstringSplit

static string[] ExtractArguments(string methodSig)
{
    int bracketStart = methodSig.IndexOf('(');
    if (bracketStart == -1) return null;
    int bracketEnd = methodSig.IndexOf(')', bracketStart + 1);
    if (bracketEnd == -1) return null;
    string arguments = methodSig.Substring(++bracketStart, bracketEnd - bracketStart);
    return arguments.Split(',').Select(s => s.Trim()).ToArray();
}

答案 1 :(得分:0)

使用正则表达式的替代解决方案:

var s = "method(arg1,arg2,arg3);";
// Use regex to match the argument sequence "arg1,arg2,arg3"
var match = Regex.Match(s, @"^\w+\((.+)\);$");
// Split the arguments and put them into an array
string[] arguments = match.Groups[1].ToString().Split(',').ToArray();

答案 2 :(得分:0)

这是一个可以处理嵌套括号的正则表达式

=IF(P3<=O3,0,IF(P3=(O3+1),1,2))

代码是从this SO post被盗的。