使用 Regex 的 C# HttpWebRequest 目录列表

C# HttpWebRequest Directory Listing using Regex

我已经通读了线程“C# HttpWebRequest 命令获取目录列表”并且可以使用以下代码:

using System;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;

namespace HTTPDirListing
{
    public class MyDirListing
    {
        
        public static string GetDirectoryListingRegexForUrl(string url)
        {
            if (url.Equals("https://aeronav.faa.gov/d-tpp/"))
            {
                 return "\\"([^\"]*)\\"";
            }
            throw new NotSupportedException();
        }
        
        public static void Main(String[] args)
        {
            string url = "https://aeronav.faa.gov/d-tpp/";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    string html = reader.ReadToEnd();
                    Regex regex = new Regex(GetDirectoryListingRegexForUrl(url));
                    MatchCollection matches = regex.Matches(html);
                    if (matches.Count > 0)
                    {
                        foreach (Match match in matches)
                        {
                            if (match.Success)
                            {
                                Console.WriteLine(match.ToString());
                            }
                        }
                    }
                }
            }

            Console.ReadLine();
        }
    }
}

下面是“reader.ReadToEnd()”之后的原始 html:

还有我当前的 Regex 表达式,我承认我只是从原始线程复制的,return如下:

所以我的问题是,使用 RegEx,我如何才能 return 不仅 return 现在正在 return,而且与每个子文件夹关联的日期?

我需要根据最新的子文件夹构建一个 URL,该文件夹标有日期。不幸的是,该列表未按日期排序。根据当前目录列表,我将构建一个 URL link 以根据日期 3/3/2022 将用户指向“/d-tpp/2203/”。

扩展您的正则表达式以包含关联的日期文本,并使用命名的捕获组:

var regex = new Regex(@"(?<date>\d{1,2}/\d{1,2}/\d{4})[^""]*\""(?<path>[^""]*)\""");
...
foreach (var match in regex.Matches(html)) {
    var date = DateTime.ParseExact(match.Groups["date"].Value, @"M\/d\/yyyy", null);
    var path = match.Groups["path"].Value;
    ...
}