我无法从httpwebresponse的大字符串返回中提取特定值。每当站点更改时,响应都是唯一的,但是我需要从源中提取一个数字。这是响应的摘要,我需要提取“ 9”,尽管每次的数字可能都不相同。
这些只是代码片段,这次的源头长达1300行。下次可能是该数字的三倍,而在另一个地方的数字可能是三倍。唯一的常数是它出现在所有HTML标签之外。
</div>
<div id="inhoud_content_rechts">
<div id="taalkeuze"><a href="index.php" class="taalkeuze_link_actief">EN</a> | <a href="nl/index.php" class="taalkeuze_link">NL</a> | <a href="fr/index.php" class="taalkeuze_link">FR</a> | <a href="es/index.php" class="taalkeuze_link">ES</a></div>
<div id="print_page"><a href="javascript:window.print();" class="taalkeuze_link">â┼' print this page</a></div> <h1 class="titel">NEWS</h1>
<br />
<h1 class="nieuws_titel">12 | 4</h1>
9
<br /><br />
<a href="news.php" class="content_link">Back to overview â┼'</a>
<br /><br />
</div>
</div>
</div>
我不能使用正则表达式匹配,因为每次更改源时,我可以想到的唯一标识符是该行在HTML之外,尽管有些事情也是如此。我尝试使用删除所有HTML标记
System.Text.RegularExpressions.Regex regexHTML = new System.Text.RegularExpressions.Regex("<[^>]*>");
text = regexHTML.Replace(text, "");
尽管这样做确实可以减少文本,例如仍然保留文本
EN | NL | FR | ES
â┼' print this page NEWS
12 | 4
9
Back to overview â┼'
我还尝试了其他几件事:
有人知道我该如何写一些可以提取所需数字的东西吗?我想也许删除所有HTML之后,我可以检查该行是否仅包含单个int,但使用isDigit,isNumber和int.parse却没有成功。如果有帮助,以下是经过编辑的字符串之前的尝试。将HTML转换为“ @”并删除所有html
“ @”编辑:
@@@@@@@@@@@@â┼' print this page@@@@@@@@@@@@ @@@@@@NEWS@@@@@@
@@@@@@
@@@@@@12 | 4@@@@@@
9
@@@@@@@@@@@@
@@@@@@Back to overview â┼'@@@@@@
@@@@@@@@@@@@
@@@@@@
@@@@@@
删除所有HTML:
EN | NL | FR | ES
â┼' print this page NEWS
12 | 4
9
Back to overview â┼'
TL:DR:提取一个数字,该数字始终出现在HTML之外,没有其他标识符,它在自己的行上。
答案 0 :(得分:0)
那这样的事情呢?
int? number = html.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
.Select(l =>
{
l = l.Trim();
if (l.Length == 1 && int.TryParse(l, out int num))
return (int?)num;
return null;
}).FirstOrDefault(n => n != null);
Console.WriteLine(number);
在我阅读问题时,它是一个数字-因此是l.Length == 1
校验。如果可以是任何数字,则可以省略长度检查。
如果搜索到的数字是一行,则此方法有效。
使用正则表达式的替代方法:
Match match = Regex.Match(html, @"</.+>\s*\n*(?<num>\d+)\s*\n*<.+>");
if (match.Success)
Console.WriteLine(match.Groups["num"]);
该模式在结束标记</xxxx>
和开始标记<xxx>
之间找到一个数字,并且在中间可以有空格和/或换行。
它适用于带有或不带有html的数字