提取许多可能的输入之一

时间:2016-05-11 14:32:27

标签: c# regex

我的正则表达式输入如下:

xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz
xyzxyzxyzxyzxyzxyzxyzxyzxyzDays</td> <td>15/td>xyzxyzxyzxyzxyzxyzxyzxyzxyz
xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz
xyzxyzxyzxyzxyzxyzxyzxyzxyz
xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz
xyzxyzxyzDays</td> <td>25/td>xyzxyzxyzxyzxyzxyz
xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz
xyzxyzxyzxyzxyzxyz
xyzxyzxyz
xyzxyzxyzxyzxyzxyzxyzxyzxyz
xyzxyzxyzxyzxyzxyzDays</td> <td>8/td>xyzxyzxyzxyzxyzxyzxyzxyzxyz
xyzxyzxyzxyzxyzxyz
xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz
xyzxyzxyzxyzxyzxyzxyzxyzxyz

xyzxyzxyz - 这就是html代码。

我想提取出现在Days后面的数字。所以它会是15。我正在从网站上抓取这个,这个数字正在改变。

我管理了这段代码:

    MatchCollection m1 = Regex.Matches(sourceCode, @"Days</td> <td>(\d+)", RegexOptions.Singleline);
    List<string> adresy = new List<string>();

    foreach (Match m in m1)
    {
        string adres = m.Groups[1].Value;
        adresy.Add(adres);
        label1.Text = adres;
    }

但是这给了我8 15的遗产。你有什么想法吗?

1 个答案:

答案 0 :(得分:2)

重点是您在每次foreach次迭代时更新标签文本。只有在收集地址后才需要更新它。用

替换整个foreach
adresy = m1.Cast<Match>().Select(p => p.Groups[1].Value).ToList();
label1.Text = adresy.Count > 0 ? adresy[0] : string.Empty;

请参阅IDEONE demo

var sourceCode = "xyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz\nxyzxyzxyzxyzxyzxyzxyzxyzxyzDays</td> <td>15/td>xyzxyzxyzxyzxyzxyzxyzxyzxyz\nxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz\nxyzxyzxyzxyzxyzxyzxyzxyzxyz\nxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz\nxyzxyzxyzDays</td> <td>25/td>xyzxyzxyzxyzxyzxyz\nxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz\nxyzxyzxyzxyzxyzxyz\nxyzxyzxyz\nxyzxyzxyzxyzxyzxyzxyzxyzxyz\nxyzxyzxyzxyzxyzxyzDays</td> <td>8/td>xyzxyzxyzxyzxyzxyzxyzxyzxyz\nxyzxyzxyzxyzxyzxyz\nxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyzxyz\nxyzxyzxyzxyzxyzxyzxyzxyzxyz"; 
var adresy = Regex.Matches(sourceCode, @"Days</td> <td>(\d+)")
            .Cast<Match>()
            .Select(p => p.Groups[1].Value)
            .ToList();
var labelText = adresy.Count > 0 ? adresy[0] : string.Empty;
Console.WriteLine(labelText);