使用 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;
...
}
我已经通读了线程“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;
...
}