我试图从中提取值AGST,1或2:

string order = "Tumbler (ID: AGST, Quantity: 1, Points each: 2)";


我在堆栈溢出here中找到了一个接近的答案。

我想在上面的链接中使用与顶级解决方案相似的方法,但是我认为我必须更改该行中的正则表达式:

var pattern = string.Format("(?<=[\\{{\\s,]{0}\\s*=\\s*)\\d+", escIdPart);


任何帮助是极大的赞赏!

编辑:

谢谢您的帮助!这是我当前的代码-

protected void Page_Load(object sender, EventArgs e)
{
    var order = "Tumbler (ID: AGST, Quantity: 1, Points each: 2)";

    var id = GetValue("ID:", order); // should return "AGST"
    var quantity = GetValue("Quantity:", order); // should return "1"

    Label3.Text = id.ToString();
    Label4.Text = quantity.ToString();
}

public string GetValue(string idPart, string test)
{
    var escIdPart = Regex.Escape(idPart);
    var pattern = string.Format(@": (.+)?,.*: (\d+).*(\d+)", escIdPart);
    var result = default(string);
    var match = Regex.Match(test, pattern, RegexOptions.IgnoreCase);
    if (match.Success)
    {
        result = match.Value;
    }
    return result;
}


id.ToString()和quantity.ToString()都应分别产生“ AGST”和“ 1”时产生“:AGST,数量:1,每个点数:2”。

再次感谢您的帮助!

编辑2:解决了!

感谢您的所有帮助!这是我的最终代码:

protected void Page_Load(object sender, EventArgs e)
{
    var order = "Tumbler (ID: AGST, Quantity: 1, Points each: 2)";

    var id = GetValue(1, order); // returns "AGST"
    var quantity = GetValue(2, order); // returns "1"
    var cost = GetValue(3, order); // returns "2"

    Label3.Text = id.ToString();
    Label4.Text = quantity.ToString();
    Label5.Text = cost.ToString();
}

public string GetValue(int group, string test)
{
    var pattern = @": (.+)?,.*: (\d+).*(\d+)";
    var result = default(string);
    var match = Regex.Match(test, pattern, RegexOptions.IgnoreCase);
    if (match.Success)
    {
        result = match.Groups[group].Value;
    }
    return result;
}


编辑3:“变量模式”表达式更改

我发现该表达式仅在“ Points each:”之后的值是一位数字时才有效。我更改了表达式,现在看来“数量:”和“每个要点:”之后的值中的任意数量的数字都可以正常工作-是否有任何异议/建议?这是代码:

protected void Page_Load(object sender, EventArgs e)
{
    var order = "Tumbler (ID: AGST, Quantity: 1, Points each: 2)";

    var id = GetValue(1, order); // returns "AGST"
    var quantity = GetValue(2, order); // returns "1"
    var cost = GetValue(3, order); // returns "2"

    Label3.Text = id.ToString();
    Label4.Text = quantity.ToString();
    Label5.Text = cost.ToString();
}

public string GetValue(int group, string test)
{
    var pattern = @": (.+)?,.*: (\d+).*: (\d+)";
    var result = default(string);
    var match = Regex.Match(test, pattern, RegexOptions.IgnoreCase);
    if (match.Success)
    {
        result = match.Groups[group].Value;
    }
    return result;
}

最佳答案

我认为您可以简化一下表达式,请考虑以下几点:

: (.+)?,.*: (\d+).*(\d+)




Debuggex Demo

07-26 06:55