需要从字符串中动态拆分

时间:2018-03-13 13:33:57

标签: c# string split

我有一个字符串,有点像这样:

string data = "I have a {apple} and a {orange}";

我需要提取{}内的内容,比如说10次

我试过这个

string[] split = data.Split(new char[] { '{', '}' }, StringSplitOptions.RemoveEmptyEntries);

问题是我的数据是动态的,我不知道{<>}会出现在什么情况下,它也可能是这样的

Give {Pen} {Pencil}

我猜上面的方法不起作用,所以我真的想知道一种动态的方法来做到这一点。任何输入都会非常有用。

谢谢和问候

3 个答案:

答案 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
    }
}