C# 在C语言中结合正则表达式提取数据#

C# 在C语言中结合正则表达式提取数据#,c#,regex,tuples,C#,Regex,Tuples,我有一个字符串,其中包含硬编码为以下格式的HTML: <span class="Marker" id="a">Some text 1</span><br> <span class="Marker" id="b">Some text 2</span><br> <span class="Marker" id="c">Some text 2</span><br> <p class="ina

我有一个字符串,其中包含硬编码为以下格式的HTML:

<span class="Marker" id="a">Some text 1</span><br>
<span class="Marker" id="b">Some text 2</span><br>
<span class="Marker" id="c">Some text 2</span><br>
<p class="inactive">Some text 4</p>
<p class="inactive">Some text 5</p>
一些文本1
一些文本2
一些文本2

一些文本4

一些文本5

我的目标是迭代每一行并:

  • 提取文本
  • 检查字符串是否包含class=“Marker”
  • 将此信息存储在列表中

    我想首先只从HTML中提取文本,并将其保存到列表中,因此我有以下内容:

    //(?<=>)  -> Lookbehind
    //(?=<)   -> Lookahead
    var matches = Regex.Matches(htmlString, "(?<=>)([^<]+)(?=<)");
    List<string> list = new List<string>();
    
    foreach (Match match in matches)
    {
       list.Add(match.Value);
    }
    
    var classes = Regex.Matches(html, "(?<=<span class=\")([A-Za-z]+)(?=\")");
    List<bool> isPresentList = new List<bool>();
    foreach (Match cl in classes)
    {
        bool isPresent = cl.ToString().Equals("Marker", StringComparison.Ordinal);
        isPresentList.Add(isPresent);
    }
    
    /(?)->向后看
    //(?=前瞻
    
    var matches=Regex.matches(htmlString,(?)([^下面这样的正则表达式怎么样

        <([\w]*) class="(\w*)"[ =\w"]*>([ \w]*)<\/\1>
    

    RegEx是处理XML/HTML的一个非常糟糕的工具。为什么不使用一个专门为它设计的工具呢?例如,这就完成了我的工作,因为HTML不会改变这种格式。我已经为您更新了RegEx,我想它更接近您想要的。您的解决方案在web链接上工作得很好,但是当我在C中使用它时,var matches=Re如下gex.Matches(html,“尝试检索单个组。快速提问,我已将最后一个组更改为((.*)),因为我的字符串可以包含标点符号。需要两组括号吗?如果内部正则表达式表示“任何字符零次或多次”那为什么还要在后面加上括号呢?我想你是对的,你不需要额外的括号。