【问题标题】:Extract value between strings using IndexOf. What is wrong?使用 IndexOf 提取字符串之间的值。怎么了?
【发布时间】:2011-11-10 21:02:50
【问题描述】:

我有从页面中检索的 HTML/CSS。我想从文件中获取价值,debt

该文件类似于以下内容:

...

<tr>
<td width="10%"><input type="hidden" name="number" value="000115900">
  <input type="hidden" name="debt" value="2.282,00">
  <input type="hidden" name="id" value="01039">
  <input type="hidden" name="idbill" value="129">
...

我想要 debt 值,在本例中为:2.282,00

我做到了:

int first = responseFromServer.IndexOf("<input type=\"hidden\" name=\"debt\" value=\"");
int last = responseFromServer.IndexOf("\">");
string str2 = responseFromServer.Substring(first + 1, last - first -1);

而且它不工作。我知道该值必须是非负数或非零。怎么了?

【问题讨论】:

  • 很抱歉有点跑题了,但是您是否考虑过使用正则表达式来完成这项工作?
  • @Chris, HE COMES.
  • 我知道正则表达式不是 html 解析器,但它仍然可以完成 TS 想做的工作.. :)

标签: c# substring


【解决方案1】:

您的last 分配应从first 开始搜索:

int last = responseFromServer.IndexOf("\">", first); 

在您的代码示例中,last 获取字符串中第一个"&gt; 的索引,因此其值小于first,而last - first - 1 为负数。

【讨论】:

    【解决方案2】:

    这是因为last 可能匹配字符串中的第一个/&gt;,而不是您要查找的&lt;input 之后的第一个。您需要在第一个(IndexOf IIRC 中的第二个参数)之后开始搜索。

    您是否尝试过使用 Html Agility Pack 来解析 HTML?

    【讨论】:

      【解决方案3】:

      试试

      string partOne = "<input type=\"hidden\" name=\"debt\" value=\"";
      string strX = responseFromServer.SubString ( responseFromServer.IndexOf(partOne) + partOne.Length);
      string str2 = strX.SubString ( 0, strX.IndexOf("\">") ); // str2 now contains 2.282,00
      

      如果您需要解析 HTML,一个非常有用(且免费)的库是 http://htmlagilitypack.codeplex.com/

      【讨论】:

      • 我在 str2 中得到了这个,="http://mywebpage/info.php" method="POST这是 HTML 页面第二行的一部分
      • @Kani 那么responseFromServer.IndexOf(partOne) 的结果必须为 partOne 不存在于responseFromServer... 这可以是例如,如果在中间的某个地方字符串存在一些额外的“空白”......因此您最好使用该库(请参阅我的答案中的链接)。
      • @Yahia :好吧,我认为使用它的枪太多了。因为我在所有程序中都需要这个值。尽管如此,也许是我独特的选择。我将阅读文档以了解其工作原理。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2012-12-18
      • 2021-09-08
      • 2021-01-09
      • 2021-09-27
      • 1970-01-01
      相关资源
      最近更新 更多