首页 > 解决方案 > 从具有前导自定义变量的字符串中获取括号值

问题描述


我想得到一个自定义变量后面括号中的字符串。

例如:
我有这个字符串:“这是一个测试(我想从中获取括号:$variable(HeyGuys))。”
我只想得到 $variable 后面括号中的字符串:“HeyGuys”

我尝试了两种不同的东西,但都得到了相同的结果:
//Input
this.GetBracketValue("I want to get the brackets from this: $variable(HeyGuys)).", "$variable");

//What the output should look like:
"HeyGuys"

//What it looks like with what I tried:
"HeyGuys)"

// Version with regex
public string GetBracketValue(string message, string variable)
{
    Regex regex = new Regex("\\" + variable + "\\(.*\\)");
    string variable = regex.Match(message).Value;
    regex = new Regex("\\(.*\\)");

    foreach(Match match in regex.Matches(variable))
    {
        string result = match.Value.Remove(0, 1);
        result = result.Remove(result.Length - 1);
        return result;
    }
    return "";
}

// Version without regex
public string GetBracketValue(string message, string variable)
{
    int index = message.IndexOf(variable) + 1;
    string substring = "";
    if (index > 0)
    {
        substring = message.Substring(index);
        index = substring.IndexOf("(");
        if (index > 0)
        {
            substring = substring.Substring(substring.IndexOf("("));
            substring = substring.Remove(0, 1);
        }

        index = substring.LastIndexOf(")");
        if (index > 0)
        {
            substring = substring.Remove(substring.LastIndexOf(")"));
        }
    }
    return substring;
}

标签: c#regex

解决方案


尝试以下:

            string input = "This is a test (I want to get the brackets from this: $variable(HeyGuys)).";
            string pattern = @"\$variable\((?'variable'[^\)]+)";

            Match match = Regex.Match(input, pattern);
            string variable = match.Groups["variable"].Value;   

推荐阅读