RegEx没有给出预期的输出

时间:2015-03-30 10:55:04

标签: c# regex

以下是C#代码。我尝试了相同的正则表达式,它在代码中,但由于某种原因,我没有得到dieired输出。代码中给出的html只是一个例子。代码可以使用C#编译器编译。

这是代码。

var x = @"
    <html>
        <table>
            <tr>
                <td class=""l w60"">Adjustments:<input id=""textbox1"" type=""textbox"" name=""textbox1"" data-label-text=""Misc. Comment12""/> </td>
                <td class=""l w60"">Adjustments:<input id=""textbox1"" type=""textbox"" name=""textbox1"" data-label-text=""Misc. Comment13""/> </td>
                <td class=""l w60"">Adjustments:<input id=""textbox1"" type=""textbox"" name=""textbox1"" No match=""Misc. Comment13""/> </td>
            </tr>           
        </table>            
    </html>";

Regex regex = new Regex(@"[\n\r].*data-label-text=""\s*([^\n\r]*)");
MatchCollection matchList = regex.Matches(x);
var list = matchList.Cast<Match>().Select(match => match.Value).ToList();

当我看到列表的内容时,我发现了这两个值。

1. <td class="l w60">Adjustments:<input id="textbox1" type="textbox" name="textbox1" data-label-text="Misc. Comment12"/> </td>

2. <td class="l w60">Adjustments:<input id="textbox1" type="textbox" name="textbox1" data-label-text="Misc. Comment13"/> </td>

但这不是理想的输出。所需的输出如下所示。

  

1.Misc。 Comment12

     

2.Misc。 Comment13

必须在Regex中修改一些内容才能获得我不擅长的所需输出。请调整正则表达式,以便实现所需的输出。

1 个答案:

答案 0 :(得分:2)

您可以使用后视和限制性更强的字符类来排除匹配的"

  Regex regex = new Regex(@"(?<=[\n\r].*data-label-text="")\s*([^\n\r""]*)");

或稍微改进的版本,也会从属性值中删除前导/尾随空格(如果您不需要,请删除\s*):

  Regex regex = new Regex(@"(?<=\sdata-label-text=""\s*)[^""]*(?=\s*"")");

输出:

enter image description here

相关问题