【问题标题】:String.Contains is returning False, When its True [closed]String.Contains 返回 False,当其为 True [关闭]
【发布时间】:2013-01-20 21:48:06
【问题描述】:

我需要解释一下,至于上帝的爱,我不知道有什么问题。 我正在通过 c#、标准 Httpwebrequest 下载网页。 我得到了完整的 HTML 代码并将其保存到一个字符串中。 然后,我为其设置了一个 webbrowsers 数据,当我点击元素时,我得到了 Html,例如:

<strong>Copyright 2011. All Rights Reserved.</strong>

当我让我的脚本比较下载的页面集合中是否存在这个确切的字符串时,我得到了错误,但是如果我在 RichTextBox 中打开这个集合中的一个,然后开始比较其余的,它确实匹配。谁能告诉我为什么?? 我试过调试和观察元素,没有什么是空的,甚至将值复制到记事本以手动比较文本,我每次都得到一个匹配,所以怎么了?编码?漏洞?我真的不知道。

这个例子来自:http://web.archive.org/web/20110208042711/http://coralifeaqualight.com/

比较页面是网站上的所有本地页面。 这里的答案将不胜感激,它看起来很简单,为什么它不起作用? 是的,我尝试在检查时在开头添加一个@。

【问题讨论】:

  • 你能把你的比较代码贴出来
  • 你能发布一些代码吗?这会让你更容易理解你在做什么。
  • 你能发布你的脚本来比较下载的页面集合吗?该脚本中一定有导致意外行为的内容。
  • 请发布您的代码。可能是隐藏字符或大小写差异导致了您的问题。

标签: c# string httpwebrequest web-scraping contains


【解决方案1】:

在最坏的情况下,您可以尝试在不使用 Contains() 的情况下获得相同的结果。这是一个例子。

string genericString = "My string";
bool contains = genericString.IndexOf("my", StringComparison.OrdinalIgnoreCase) >= 0;

【讨论】:

    【解决方案2】:

    您可以通过这种方式检查是否有隐藏字符干扰匹配:

    using System.Text.RegularExpressions;
    

    ...

    string output = Regex.Replace(input, "[^\u0021-\u007E]","");
    

    如果它们在此之后匹配,那么你知道有一些字符把你弄乱了(可能是换行符?)。

    【讨论】:

      【解决方案3】:

      我的猜测是有一个字符没有显示在您正在查看数据的编辑器中。尝试将确切的数据复制到 TextPad 之类的东西中,看看字符串中是否有任何多余的字符。

      这是没有代码我能做的最好的事情

      【讨论】:

        猜你喜欢
        • 2012-02-27
        • 1970-01-01
        • 2013-06-12
        • 2014-05-11
        • 1970-01-01
        • 1970-01-01
        • 2021-07-02
        • 2011-05-22
        • 1970-01-01
        相关资源
        最近更新 更多