C# 试图在字符串中间提取代码

C# 试图在字符串中间提取代码,c#,string,C#,String,我试图从字符串中提取代码。字符串的内容和大小可能会有所不同,但我使用标记词来简化提取过程。然而,我正在努力确定一个特定的场景。以下是字符串: ({GoldPrice} * 0.376) + {MP.011} + {SilverPrice} 我需要提取的是{MP.011}的011部分。关键字将始终是“{MP.”更改的只是代码。表达式的其余部分也可以更改,例如{MP.011}可以位于字符串的开头、结尾或中间 我已经用以下方法接近成功: int pFrom = code.IndexO

我试图从字符串中提取代码。字符串的内容和大小可能会有所不同,但我使用标记词来简化提取过程。然而,我正在努力确定一个特定的场景。以下是字符串:

({GoldPrice} * 0.376) + {MP.011} + {SilverPrice}
我需要提取的是{MP.011}的011部分。关键字将始终是“{MP.”更改的只是代码。表达式的其余部分也可以更改,例如{MP.011}可以位于字符串的开头、结尾或中间

我已经用以下方法接近成功:

        int pFrom = code.IndexOf("{MP.") + "{MP.".Length;
        int pTo = code.LastIndexOf("}");
        String result = code.Substring(pFrom, pTo - pFrom);
但是,结果是
011}+{SilverPrice
,因为它正在查找}的最后一次出现,而不是下一次出现。这就是我努力奋斗的地方


非常感谢您的帮助。

您可以使用正则表达式来解析:

        int pFrom = code.IndexOf("{MP.") + "{MP.".Length;
        int pTo = code.IndexOf("}", pFrom); //find index of } after start
        String result = code.Substring(pFrom, pTo - pFrom);
var str = "({GoldPrice} * 0.376) + {MP.011} + {SilverPrice}";
var number = Regex.Match(str, @"{MP\.(\d+)}")
    .Groups[1].Value;
Console.WriteLine(number);

最安全的选择是使用带有负前瞻和正前瞻的正则表达式。如果您仍然需要,它也会匹配多个

  var str3 = @"({GoldPrice} * 0.376) + {MP.011} + {SilverPrice}";
  var result = Regex.Matches(str3, @"(?<=\{MP\.).+?(?=\})");

  foreach (Match i in result)
  {
      Console.WriteLine(i.Value);
  }
var str3=@“({GoldPrice}*0.376)+{MP.011}+{SilverPrice}”;

var result=Regex.Matches(str3,@)(?关键是使用
.IndexOf(string text,int start)
重载

static void Main(string[] args)
{
    string code = "({GoldPrice} * 0.376) + {MP.011} + {SilverPrice}";

    // Step 1. Extract "MP.011"
    int pFrom = code.IndexOf("{MP.");
    int pTo = code.IndexOf("}", pFrom+1);
    string part = code.Substring(pFrom+1, pTo-pFrom-1);
    // Step 2. Extact "011"
    String result = part.Substring(3);
}
或者您可以将最后的语句合并到

    String result = code.Substring(pFrom+1, pTo-pFrom-1).Substring(3);

在“MP”之后总是3个字符吗。"?C#不是我的强项,但你能不能在从pFrom开始的字符串上循环一下?一旦遇到
}
就停止。谢谢Simonare。但是,这似乎不会作为结果返回匹配项?请欣赏更新。它现在给出了一个结果,但它不会处理代码的变化,实际上,它可能是MP之后的任何东西。这是一个更新字符串的d示例:({GoldPrice}*0.376)+{MP.011M}+{SilverPrice}+{MP.013M}Hi Simonare,开始了!结果现在是011M}+{SilverPrice}+{MP.013M,这时应该有两个结果“011M”和“013M”如果你认为这个答案是有用的,请考虑把它作为一个答案进行投票和/或打勾。谢谢。