尝试在字符串中间提取代码

时间:2018-12-26 15:36:31

标签: c# string

我正在尝试从字符串中提取代码。字符串的内容和大小可能有所不同,但是我正在使用标记词来简化提取过程。但是,我正在努力确定一个特定的情况。这是字符串:

({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,因为它正在寻找}的最后一次出现,而不是下一次出现。这就是我在努力的地方。

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:4)

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

var str = "({GoldPrice} * 0.376) + {MP.011} + {SilverPrice}";
var number = Regex.Match(str, @"{MP\.(\d+)}")
    .Groups[1].Value;
Console.WriteLine(number);

答案 1 :(得分:3)

        int pFrom = code.IndexOf("{MP.") + "{MP.".Length;
        int pTo = code.IndexOf("}", pFrom); //find index of } after start
        String result = code.Substring(pFrom, pTo - pFrom);

答案 2 :(得分:1)

最安全的选择是对正负使用正则表达式。如果您仍然需要,也可以匹配多个。

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

  foreach (Match i in result)
  {
      Console.WriteLine(i.Value);
  }

答案 3 :(得分:0)

关键是要使用-Duser.mgt.connection.url="connection-string" \重载。

.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);
}