替换字符串中的括号

本文关键字:字符串 替换 | 更新日期: 2023-09-27 18:15:30

我必须用[]替换字符串中的所有{}括号。

但是我在最开始有一个{,在字符串的最后有一个},不能改变。

我如何在c#中做到这一点?

替换字符串中的括号

可能有很多方法可以做到这一点,包括将它们全部替换并将第一个/最后一个替换回原始值,但这里有一个Regex替换方法,它将替换除第一个{和最后一个}之外的所有大括号。

您可以在LINQPad

中进行测试
void Main()
{
    string input = "{ a{b}c }";
    int indexOfFirstBrace = input.IndexOf('{');
    int indexOfLastBrace = input.LastIndexOf('}');
    string output = Regex.Replace(input, "[{}]", match =>
    {
        if (match.Index == indexOfFirstBrace || match.Index == indexOfLastBrace)
            return match.Value;
        if (match.Value == "{")
            return "[";
        return "]";
    });
    output.Dump();
}
输出:

{ a[b]c }

下面是另一个方法,它将字符串解构为字符数组,收集所有字符并构建另一个字符串,逐个字符进行替换。

string output = new string(input
    .Select((c, i) =>
        i == indexOfFirstBrace || i == indexOfLastBrace ? c
            : c == '{'                                  ? '['
            : c == '}'                                  ? ']'
                                                        : c)
    .ToArray());
    [TestMethod]
    public void Replace()
    {
        string before = "{{{abc}}";
        string expect = "{[[abc]}";
        string calc = '{' + before.Substring(1, before.Length - 2).Replace('{', '[').Replace('}', ']') + '}';
        Assert.AreEqual(expect, calc);
    }