Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Regex-提取外部范围匹配值<;表>&书信电报;表></表></表>;_C#_Regex - Fatal编程技术网

C# Regex-提取外部范围匹配值<;表>&书信电报;表></表></表>;

C# Regex-提取外部范围匹配值<;表>&书信电报;表></表></表>;,c#,regex,C#,Regex,在这里,选择的是内部表而不是外部表。不赞成使用正则表达式这样做,但是如果必须这样做,可以定义一些边界,例如: var htmlDocument = new HtmlDocument(); htmlDocument.LoadHtml(htmlInput); var output = htmlDocument.DocumentNode .SelectNodes("table/tr"); (?Regex不是用于此目的的

在这里,选择的是内部表而不是外部表。

不赞成使用正则表达式这样做,但是如果必须这样做,可以定义一些边界,例如:

var htmlDocument = new HtmlDocument();
            htmlDocument.LoadHtml(htmlInput);

            var output = htmlDocument.DocumentNode
                .SelectNodes("table/tr");

(?Regex不是用于此目的的合适工具。请使用.Use-HtmlAgilityPack解析HTML并提取相关节点。Regex对于这些任务来说过于核心。如上所述,Regex不是合适的方法。但是出于兴趣,您需要一些第1组的内容
Text A

<table>
    <tr>
        <td>Text B</td>
    </tr>
</table>

<table>
    <tr>
        <td>Text C</td>
    </tr>
</table>

Text D
var regexTableRow = new Regex("<tr><td>(.*?)</td></tr>");

        var regexMatches = regexTableRow.Matches(htmlInput);

        var tableRows = new List<string>();

        foreach (Match match in regexMatches)
        {
            // Get a row of <tr></tr> out
            var value = match.Value;

            tableRows.Add(value);
        }
var htmlDocument = new HtmlDocument();
            htmlDocument.LoadHtml(htmlInput);

            var output = htmlDocument.DocumentNode
                .SelectNodes("table/tr");
(?<=<table>)\s*<tr>\s*<td>([a-z0-9 ]*)<\/td>\s*<\/tr>
using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(?<=<table>)\s*<tr>\s*<td>([a-z0-9 ]*)<\/td>\s*<\/tr>";
        string input = @"<table>
    <tr>
        <td>Text A</td>
    </tr>
    <tr>
        <td>
            <table>  <!-- Notice this is an inner scope table -->
                <tr>
                    <td>Text B</td>
                </tr>
            </table>
        </td>
    </tr>
</table>

<table>
    <tr>
        <td>
            <table> <!-- Notice this is an inner scope table -->
                <tr>
                    <td>Text C</td>
                </tr>
            </table>
        </td>
    </tr>
</table>

<table>
    <tr>
        <td>Text D</td>
    </tr>
</table>";
        RegexOptions options = RegexOptions.Singleline | RegexOptions.IgnoreCase;
        
        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}