регулярное выражение для удаления фигурных скобок с вложенными фигурными скобками - PullRequest
0 голосов
/ 15 декабря 2009

Это моя строка: "This Is {{ dsfdf {{dsfsd}} ewrwrewr }} My Result".

Я хочу удалить внешние фигурные скобки с их содержимым. Результат должен быть "This Is My Result".

Это мой лучший снимок на данный момент:

Text = Regex.Replace(Text, "{{([^}]*)}}", String.Empty);

но это не работает хорошо. Я получаю "This Is ewrwrewr }} My Text"

Возможно, это нужно решить с помощью согласования баланса ...

Я был бы очень признателен, если бы кто-нибудь мог помочь мне решить эту проблему, потому что, хотя многие попытки я не мог сделать это сам.

Ответы [ 2 ]

2 голосов
/ 15 декабря 2009

Простой, но медленный способ - применять регулярные выражения несколько раз, пока больше не будет изменений:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main(string[] args)
    {
        string s = "This Is {{ dsfdf {{dsfsd}} ewrwrewr }} My Result";

        Regex regex = new Regex("{{({?}?[^{}])*}}");
        int length;
        do
        {
            length = s.Length;
            s = regex.Replace(s, "");
        } while (s.Length != length);

        Console.WriteLine(s);
     }
}
1 голос
/ 15 декабря 2009

О чем вы думаете:

string test = "This Is {{ dsfdf {{dsfsd}} \n jkhhjk ewrwrewr }} My Result";
Console.WriteLine(Regex.Replace(test, "{{.*}}", String.Empty, RegexOptions.Singleline));

Версия без "Regex":

string test = "This Is {{ dsfdf {{dsfsd}} \n jkhhjk ewrwrewr }} My Result";
int startIndex = test.IndexOf("{");
int length = test.LastIndexOf("}") - startIndex + 1;
Console.WriteLine(test.Replace(test.Substring(startIndex, length), String.Empty));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...