Текст, теги, base64 и RegEx C# - PullRequest
0 голосов
/ 17 апреля 2020

Добрый вечер, у меня проблема с Regex.

Я прочитал json, и текст имеет структуру:

text[TAG1 attributes]othertext[/TAG1][TAG2 attributes]base64string[/TAG2]

Мне нужно извлечь окончательный текст как

text othertext base64string(decode)

Вводимый текст может быть многострочным.

Что я могу сделать, чтобы получить это?

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Вот регулярное выражение, которое должно соответствовать вашему случаю:

(?>^|\n|\[[^\]\n]*\]\n*)(?'content'[^\[]+)

Regex101 Demo

Вы в основном соответствует [ или newline и всем, что между до ] и начать захват в группу с именем content , content до следующего [ вхождения.

В C# это будет выглядеть примерно так:

        var input = @"text[TAG1 attributes]othertext[/TAG1][TAG2 attributes]base64string[/TAG2]
text2[TAG1 attributes]othertext2[/TAG1][TAG2 attributes]base64string2[/TAG2]
text3[TAG1 attributes]othertext3[/TAG1][TAG2 attributes]base64string3[/TAG2]";

        var expression = new Regex(@"(?>^|\n|\[[^\]\n]*\]\n*)(?'content'[^\[]+)");
        Match match = expression.Match(input);
        while (match.Success)
        {
            var content = match.Groups["content"].Value;
            Console.WriteLine(content);
            match = match.NextMatch();
        }

. Net fiddle demo

Читайте в документах MS о Match.Groups .

0 голосов
/ 20 апреля 2020

Спасибо! Я решаю таким образом с вашим RegEX

    foreach (Match match in items)
{
    string content = match.Groups["content"].Value;
    if (string.IsNullOrEmpty(content) == false)
    {
        try
        {
            var decodeText = TextHelper.Base64Decode(content);
            sb.AppendLine(decodeText);
        }
        catch
        {
            sb.AppendLine(content);
        }
    }

Я надеюсь помочь кому-нибудь с этим фрагментом на основе вашего решения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...