簡體   English   中英

使用RegEx將括號內的括號更改為括號

[英]Change parentheses within parentheses into brackets using RegEx

我的起始字符串如下所示:

This is (a test) of (something (cool like) this and) stuff like ((that and) stuff) yeah.

我想將其轉換為:

This is (a test) of (something [cool like] this and) stuff like ([that and] stuff) yeah.

括號內的任何括號都需要更改為方括號[]。 其他一切都保持不變。 它不需要進行遞歸,並且只比示例中的示例更深一層……如果有幫助的話。

到目前為止,我的字符串函數只能讓它找到第一個括號,因此我確實沒有示例代碼。 : - /

static String CorrectBrackets(String stringToCorrect)
{

    int firstParenIdx = stringToCorrect.IndexOf('(');

    return stringToCorrect;
}

另外,如果沒有RegEx就可以做到這一點,那我很好!

確實,無需RegEx即可以非常簡單的方式完成此操作:

遍歷所有字符並記住括號的嵌套級別。 如果您已經在嵌套級別1上,並找到其他任何右括號或右括號,請替換它們。

未經測試,但希望可以說明:

static string CorrectBrackets(string strString)
{
    var result = new System.Text.StringBuilder(strString);
    int bracketLevel = 0;
    for (int i = 0; i < result.Length; i++) {
        switch (result[i]) {
            case '(':
                bracketLevel++;
                if (bracketLevel >= 2) {
                    result[i] = '[';
                }
                break;
            case ')':
                bracketLevel--;
                if (bracketLevel >= 1) {
                    result[i] = ']';
                }
                break;
    }
    return result.ToString();
}

如果您不希望使用正則表達式,則會執行此操作,它會計算縮進級別,如果縮進級別大於1,則會使用方括號切換括號。

private static string CorrectBrackets(string text)
{
    StringBuilder builder = new StringBuilder(text);
    int nestingLevel = 0;
    for (int i = 0; i < builder.Length; i++)
    {
        switch (builder[i])
        {
            case '(':
                if (nestingLevel > 0) builder[i] = '[';
                nestingLevel++;
                break;
            case ')':
                if (nestingLevel > 1) builder[i] = ']';
                nestingLevel--;
                break;
            default: break;
        }
    }
    return builder.ToString();
}

應該這樣做:

static readonly Regex regex = new Regex(@"\([^\(^\).]*(?<bracket>\([^\(^\).]+\))[^\(^\).]*\)");

static string ReplaceInnerParens(Match match)
{
    return match.Value.Replace(match.Groups["bracket"].Value, "[" + match.Groups["bracket"].Value.Substring(1, match.Groups["bracket"].Value.Length - 2) + "]");
}

static string Replace(string input)
{
    return regex.Replace(input, new MatchEvaluator(ReplaceInnerParens));
}

void Main() {
    Console.WriteLine(Replace("This is (a test) of (something (cool like) this and) stuff like ((that and) stuff) yeah."));
}

您也可以使用此正則表達式:

(?<=\().*(?<bracket>\([^\(]*\)).*(?=\))

與不貪心標志。

您應該用[和]替換組“方括號”,以替換第一個和最后一個字符

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM