一次更换(倒置)开启和关闭支架

Yah*_*hia 2 c# regex

解决方案应该很简单,但仍然在苦苦挣扎.如何反转分组符号,如括号,括号,大括号,...

我的字符串是这样的: Lorem ipsum dolor )sit amet(, consectetur ]adipiscing[ elit

我希望输出为 Lorem ipsum dolor (sit amet), consectetur [adipiscing] elit

关键是如果我在多次传递中逐个符号地转换符号,它会被转换两次:

text = text.Replace('[', ']');
text = text.Replace(']', '[');
text = text.Replace('(', ')');
text = text.Replace(')', '(');
Run Code Online (Sandbox Code Playgroud)

结果是 Lorem ipsum dolor (sit amet(, consectetur [adipiscing[ elit

如何一次转换文本?

xan*_*tos 9

像古人一样做...你按字符重建字符串...

string str = "Lorem ipsum dolor )sit amet(, consectetur ]adipiscing[ elit";

var sb = new StringBuilder(str.Length);

foreach (char ch in str)
{
    switch (ch)
    {
        case '[':
            sb.Append(']');
            break;
        case ']':
            sb.Append('[');
            break;
        case '(':
            sb.Append(')');
            break;
        case ')':
            sb.Append('(');
            break;
        default:
            sb.Append(ch);
            break;
    }
}

string str2 = sb.ToString();
Run Code Online (Sandbox Code Playgroud)

或者你可以开始你的混淆C#课程:-)

string str3 = new Regex(@"[\[\]()]")
    .Replace(str, x => ((char)(x.Value[0] + (x.Value == "[" || x.Value == "(" ? 
        1 + (x.Value[0] / '[') : 
        -1 - (x.Value[0] / '[')))).ToString());
Run Code Online (Sandbox Code Playgroud)