在 C# 中如何更好地解析此 html 内容?

阿尼尔·加迪亚尔

我将这个网络服务器数据收集在一个字符串数组中。我正在正确对齐使用Regex以获得更好的可读格式。

string[] liness = Regex.Split(html, "\r\n");

里面的数据liness现在看起来像这样。

    <html><head><title>137.55.124.65 - /</title></head><body><H1>137.55.124.65 - /</H1><hr>

   Thursday, June 7, 2018  6:27 PM        &lt;dir&gt; <A HREF="/2.5.25557/">2.5.25557</A>
      Thursday, June 14, 2018  5:25 PM        &lt;dir&gt; <A HREF="/2.5.25569/">2.5.25569</A>
     Wednesday, June 20, 2018  8:34 AM        &lt;dir&gt; <A HREF="/2.5.25578/">2.5.25578</A>
     Wednesday, June 20, 2018  5:33 PM        &lt;dir&gt; <A HREF="/2.5.25580/">2.5.25580</A>
       Tuesday, June 26, 2018  8:36 AM        &lt;dir&gt; <A HREF="/2.5.25581/">2.5.25581</A>
        Friday, June 29, 2018  8:36 AM        &lt;dir&gt; <A HREF="/2.5.25582/">2.5.25582</A>
        Tuesday, July 3, 2018  8:35 AM        &lt;dir&gt; <A HREF="/2.5.25584/">2.5.25584</A>
       Thursday, July 5, 2018  8:35 AM        &lt;dir&gt; <A HREF="/2.5.25586/">2.5.25586</A>
        Monday, July 16, 2018  8:33 AM        &lt;dir&gt; <A HREF="/2.5.25587/">2.5.25587</A>
        Tuesday, May 29, 2018  8:30 PM          696 <A HREF="/iisstart.htm">iisstart.htm</A>
        Tuesday, May 29, 2018  8:30 PM        98757 <A HREF="/iisstart.png">iisstart.png</A>
 Wednesday, November 19, 2014  3:41 PM          214 <A HREF="/index.html">index.html</A>

我如何更好地提取以开头的值,2.*.**** (ex: 2.5.8827)如果您注意到每行HREF="/2.5.25425/">也有重复的值。解析所有这些值并将其放入一个列表中,然后这是获取最高版本号(单个值)的棘手部分

ex: 2.5.1000 , 2.5 1001. 2.5.1002. 2.5.1003.

我上面示例列表中的最高版本是 2.5.1003

我已经使用正则表达式尝试了上述操作。

List<string> versionvalue = new List<string>();
            string pattern = "2."; 
            foreach (String l_html in liness)
            {
                string[] substrings = Regex.m(l_html, pattern);
                //versionvalue.Add(substrings[]);
             if ((l_html.Contains("2.")) && (l_html.Contains(currentYear.ToString()) ))
               {

               }
            }

但看起来很乱,没有找到我正在寻找的任何值。regex.matches工作吗?所有帮助表示赞赏!

乔治·帕沙伊德

您正在寻找的正则表达式模式是<A HREF="\/(\d\.\d\.\d{5})\/">,即捕获一个<A HREF="">. 此模式的正则表达式 101

提取这些字符串后,将它们解析为一个VersionNumber类。该类通过IComparable接口实现比较这确保 VersionNumbers 可以正确排序OrderBy

public class VersionNumber : IComparable {

    public int Major    { get; set; }
    public int Minor    { get; set; }
    public int Revision { get; set; }

    // Converts string to VersionNumber object
    public static VersionNumber Parse(string s) {
        if (string.IsNullOrWhiteSpace(s)) {
            throw new ArgumentNullException(nameof(s));
        }

        var parts = s.Split(new [] {'.'});
        if (parts.Count() != 3) {
            throw new ArgumentException("Input string must be in format 'X.Y.ZZZZZ'.");
        }

        var result = new VersionNumber();
        try {
            result.Major    = int.Parse(parts[0]);
            result.Minor    = int.Parse(parts[1]);
            result.Revision = int.Parse(parts[2]);
        }
        catch (FormatException) {
            throw new ArgumentException("Input string must be in format 'X.Y.ZZZZZ', with X, Y, Z integers.");
        }

        return result;
    }

    // Compares two VersionNumbers
    public int CompareTo(object obj) {
        if (obj == null) return 1;

        VersionNumber otherVersion = obj as VersionNumber;
        if (otherVersion == null) {
            throw new ArgumentException($"Object is not a {nameof(VersionNumber)}.");
        }

        // start comparison with Major Version, then Minor, then Revision
        var result = Major.CompareTo(otherVersion.Major);
        if (result == 0) {
            result = Minor.CompareTo(otherVersion.Minor);
        }
        if (result == 0) {
            result = Revision.CompareTo(otherVersion.Revision);
        }
        return result;
    }

    public override string ToString() {
         return Major + "." + Minor + "." + Revision;
    }
}

另请参阅此.Net Fiddle示例用法:

string[] versionStrings = new [] {"3.5.25569", "2.5.25557", "2.5.25580", "2.5.25569", "2.4.25569"};
// parsing
IEnumerable<VersionNumber> versions = versionStrings.Select(s => VersionNumber.Parse(s));
// sorting
IOrderedEnumerable<VersionNumber> sorted = versions.OrderBy(v => v);
// sorted: 2.4.25569, 2.5.25557, 2.5.25569, 2.5.25580, 3.5.25569

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 UIView Objective C 中显示 HTML 内容

来自分类Dev

HTML内容中的HTML

来自分类Dev

如何使用此HTML代码解析我想要的内容?

来自分类Dev

如何在C#中获取html标记的内容

来自分类Dev

在VBA中解析HTML内容

来自分类Dev

如何更好地编写此C ++程序

来自分类Dev

C#-获取html内容

来自分类Dev

如何制作HTML内容?

来自分类Dev

如何构造此HTML以将div中的内容居中

来自分类Dev

如何构造此HTML以将div中的内容居中

来自分类Dev

将HTML编辑器内容保存为C#中的内容类型.DOCX

来自分类Dev

将HTML编辑器内容保存为C#中的内容类型.DOCX

来自分类Dev

使用VBA解析HTML内容

来自分类Dev

使用Jsoup解析HTML内容

来自分类Dev

使用Jsoup解析HTML内容

来自分类Dev

在TextView中显示已解析的HTML内容

来自分类Dev

在TextView中显示已解析的HTML内容

来自分类Dev

在C#中找到HTML的XPath内容

来自分类Dev

如何在 C# 中的 XML 到 JSON 转换期间忽略 HTML 内容的#cdata 部分

来自分类Dev

如何从UIWebView获取html内容?

来自分类Dev

如何隐藏html元素的内容

来自分类Dev

“” + C ++中的内容

来自分类Dev

“” + C ++中的内容

来自分类Dev

JSF中的HTML内容呈现

来自分类Dev

在Ionic中呈现HTML内容

来自分类Dev

vaadin标签中的HTML内容

来自分类Dev

在fancybox中显示html内容?

来自分类Dev

在 UILabel 中显示 HTML 内容

来自分类Dev

html 内容在 chrome 中消失了