【发布时间】:2019-07-10 12:10:24
【问题描述】:
我无法从 httpwebresponse 返回的大字符串中提取特定值。每次站点更改时响应都是唯一的,但我需要从源中提取一个数字。这是响应的 sn-p,我需要提取“9”,尽管每次可能是不同的数字。
这些只是sn-ps,这次的源代码是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 转换为“@”,将每一行添加到列表中,然后跳过不包含“@”的行——这可能是最成功的尝试,但仅包含数字的行无法抓取,我尝试删除所有空格并使用 isDigit / isNumber 但它返回 false。
- 将整个字符串转换为 char 并循环遍历每一行以查找 isDigit - 与上述问题相同
有没有人知道我如何写一些东西来提取我需要的数字?我想也许在删除所有 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 之外且没有其他标识符的数字,它在自己的行中。
【问题讨论】:
-
有专门的库来处理 HTML 文本。您应该搜索“C# HTML Parser Libraries”。其中最著名的是Html Agility Pack 和Regular expressions to parse Html is a bad idea
-
这类问题的关键是弄清楚你如何识别要提取的文本。如果它确实是它自己的行上的任何文本,您可以使用正则表达式来查找不包含
<或>的行 - 或者您可以使用解析器并查找具有正确类的h1,并返回它的内容。 -
我不是在处理 HTML,我正在尝试提取一个甚至不在任何 HTML 中的数字。我还解释说,正则表达式是不可能的,因为源代码经常更改,是的,它真的是靠它自己的……你们都读过这篇文章吗?不要粗鲁,但你刚才所说的都是错误的,不相关的,并且已经在 OP 中解决了。我不是试图使用正则表达式来捕获我只用它来删除所有 HTML 标记的数字。这次源代码超过 1,300 行,下次可能是三倍。文档顶部有大量没有 HTML 的行。
-
如果我的回复没有帮助,那是因为问题不清楚,而不是因为我没有阅读。粗鲁无济于事。如果一行中有多个文本,你怎么知道你想要哪一个?
-
你不用再回答了,你真的没救了。我很感激你的努力,但我很累,我已经连续 26 小时在这个项目上工作了,像“你怎么知道你想要哪个”这样的问题只会加剧。我把那是我想要的主题,我想要它的原因与问题无关。我只需要提取 9 并将约束放在我的问题中。我什至把我尝试过的方法放在我已经删除了所有 HTML 的地方,你说你读了这个问题,但你的答案是我已经尝试过并在原始帖子中发布的内容。