获取html标签之间和非html标签之间的文本到列表中

时间:2019-07-09 01:03:00

标签: c# regex

我正在尝试在C#中使用正则表达式来提取通过所见即所得编辑器输入的文本。我打算使用正则表达式,但无法执行“或”运算符,因此我在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 个答案:

答案 0 :(得分:1)

由于时间的复杂性,我认为用正则表达式执行此任务并不是最好的主意。例如,我们可以检查此表达式,

(?<=>)([^<]*?)(?=<)|\b([^<>]{2,})
如果您想进一步探索,请在this demo右上角的面板上解释

,在this link中,您可以逐步观察它与某些示例输入的匹配情况。这样,以及该过程的效率如何。

示例

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# Demo