我有一个字符串,有点像这样:
string data = "I have a {apple} and a {orange}";
我需要提取{}
内的内容,比如说10次
我试过这个
string[] split = data.Split(new char[] { '{', '}' }, StringSplitOptions.RemoveEmptyEntries);
问题是我的数据是动态的,我不知道{<>}
会出现在什么情况下,它也可能是这样的
Give {Pen} {Pencil}
我猜上面的方法不起作用,所以我真的想知道一种动态的方法来做到这一点。任何输入都会非常有用。
谢谢和问候
答案 0 :(得分:4)
试试这个:
string data = "I have a {apple} and a {orange}";
Regex rx = new Regex("{(.*?)}");
foreach (Match item in rx.Matches(data))
{
Console.WriteLine(item.Groups[1].Value);
}
您需要使用Regex
来获取所需的所有值。
答案 1 :(得分:2)
如果{}
之间的字符串不包含嵌套{}
,您可以使用正则表达式执行此任务:
string data = "I have a {apple} and a {orange}";
Regex reg = new Regex(@"\{(?<Name>[A-z0-9]*)\}");
var matches = reg.Matches(data);
foreach (var m in matches.OfType<Match>())
{
Console.WriteLine($"Found {m.Groups["Name"].Value} at {m.Index}");
}
要替换{}
之间的字符串,您可以使用Regex.Replace
:
reg.Replace(data, m => m.Groups["Name"].Value + "_")
// Will produce "I have a apple_ and a orange_"
要获取字符串的其余部分,您可以使用Regex.Split
:
Regex reg2 = new Regex(@"\{[A-z0-9]*\}");
var result = reg2.Split(data);
// will contain "I have a ", " and a ", "", you might want to remove ""
答案 2 :(得分:1)
据我了解,您希望将该字符串拆分为以下部分:
I have a
{apple}
and a
{orange}
然后你想要检查这些部分并对它们做一些事情,根据部分是否包含在{}
中,某些内容会有所不同。如果是这样 - 您需要Regex.Split
:
string data = "I have a {apple} and a {orange}";
var parts = Regex.Split(data, @"({.*?})");
foreach (var part in parts) {
if (part.StartsWith("{") && part.EndsWith("}")) {
var trimmed = part.TrimStart('{').TrimEnd('}');
// "apple" and "orange" go here
// do something with {} part
}
else {
// "I have a " and " and a " go here
// do something with other part
}
}