Получить текст между HTML-тегами и не-между HTML-тегами в список - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь использовать регулярные выражения в C # для извлечения текста, введенного через WYSIWYG редактор. Я планирую использовать регулярное выражение, но не могу сделать оператор OR, поэтому у меня есть список строк между HTML-тегами и не-между HTML-тегами. Этот список важен для постобработки для Openxml - Генерация презентаций. Вот что у меня сейчас:

Заранее спасибо.

string Pattern = "<.*?>(.*?)<\\/.*?>";
MatchCollection matches = Regex.Matches(BankerBioRichtext, BoldPattern);

Например:

Lorem ipsum dolor sit <b>amet, consectetur adipiscing elit,</b>
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation <i>ullamco laboris
nisi ut</i> aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.

Попытка вывода:

li[0] lorem ipsum dolor sit
li[1] amet, consectetur adipiscing elit
li[2] , sed do eiusmod tempor................

1 Ответ

2 голосов
/ 09 июля 2019

Это не самая лучшая идея делать эту задачу с регулярными выражениями из-за сложности времени, я думаю.Например, мы можем проверить это выражение,

(?<=>)([^<]*?)(?=<)|\b([^<>]{2,})

, которое объяснено на верхней правой панели этой демонстрации , если вы хотите исследовать дальше, и в этой ссылке, вы можете посмотреть, как шаг за шагом он будет сопоставляться с некоторыми примерами входных данных, если хотите, и насколько неэффективным может быть процесс.

Пример

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(?<=>)([^<]*?)(?=<)|\b([^<>]{2,})";
        string input = @"Lorem ipsum dolor sit <b>amet, consectetur adipiscing elit,</b>
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation <i>ullamco laboris
nisi ut</i> aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.";
        RegexOptions options = RegexOptions.Singleline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}

C # Демо

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