我的正则表达式输入如下:
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
的遗产。你有什么想法吗?
答案 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);