我正在尝试从字符串中提取代码。字符串的内容和大小可能有所不同,但是我正在使用标记词来简化提取过程。但是,我正在努力确定一个特定的情况。这是字符串:
({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
,因为它正在寻找}的最后一次出现,而不是下一次出现。这就是我在努力的地方。
任何帮助将不胜感激。
答案 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);
}