【问题标题】:Retrieving part of a string检索字符串的一部分
【发布时间】:2011-09-17 04:46:53
【问题描述】:

我正在使用 Html Agility Pack 解析一个 html 页面。我成功地在字符串中获取了以下文本:

WOCN11 CWTO 170951 特别天气声明 由加拿大环境部更新 美国东部时间 2011 年 6 月 17 日星期五上午 5:51。 为..发布的特殊天气声明 萨尼亚-兰姆顿 伦敦 - 米德尔塞克斯 牛津 - 布兰特 滑铁卢 - 惠灵顿。 -------------------------------------------------- ------------------ 据报道,能见度接近于零的浓雾斑块 以上领域。敦促这些地区的旅行者格外小心 领域。 预计今早日出后不久雾将消散。 结束/OSPC ACCN10 CWTO 170735 安大略省雷暴潜力预报 加拿大环境部于 2011 年 6 月 17 日星期五美国东部时间凌晨 3:35 发布。 下一份声明将于今天下午 4.30 发布。 -------------------------------------------------- ------------------ 雷暴潜力预报。 今天..东部地区有孤立的非强雷暴 和安大略省东北部。 今晚..东部和东部地区出现孤立的非严重雷暴 今晚安大略省东北部。 星期六..极端的孤立的非严重雷暴 安大略省西南部主要在下午和傍晚。 -------------------------------------------------- ------------------ 如果雷暴产生一种或多种 下列的: - 90 公里/小时或更大的阵风。 - 直径为 2 厘米或更大的冰雹。 - 在一小时或更短的时间内降雨量为 50 毫米或更大。 - 龙卷风。 注:此预报于 5 月 1 日至 9 月 30 日每天发布两次。 结束/OSPC

我只想提取以下部分:

雷暴潜力预报。 今天..东部地区有孤立的非强雷暴 和安大略省东北部。 今晚..东部和东部地区出现孤立的非严重雷暴 今晚安大略省东北部。 星期六..极端的孤立的非严重雷暴 安大略省西南部主要在下午和傍晚。

我在 .Net 3.5 上使用 Csharp。任何帮助表示赞赏。

问题已更新

【问题讨论】:

  • 所以你想要第 2 行和第 3 行连字符之间的文本部分。是否保证您总是想要该特定部分?
  • 我不确定您是否可以自动执行此操作。提取字符串很容易,但找出要提取的字符串是个问题。加拿大环境部的措辞并不那么可预测。

标签: c# .net winforms substring


【解决方案1】:

您可以这样做的一种方法(虽然不是 100% 理想),如下所示:

string[] textSplit = theWholeTextString.Split(new string[] { "---------------------------------------------------------------------" }, StringSplitOptions.None);
string myText = textSplit[2];

当然,假设你想要的文本总是在第 3 部分,并且每个部分总是用 '-----' 行分隔

【讨论】:

  • 我也有同样的建议。不过,我认为您需要修改代码,因为 string.Split 的重载可以采用字符数组或字符串数​​组。如果不指定数组类型,则假定为字符。它会以双引号中的方式抛出异常。
  • 如果没有-------------------,只有区分字符串和子字符串的文本怎么办?
  • 我认为您可能必须在文本中搜索您只可能在您要查找的部分中找到的关键字。比如“今天”或“明天”或“星期一”。除此之外,我不确定。文本不是很结构化。您能否从源头或其他来源获得更多信息?
【解决方案2】:

为了让我们能够为您提供帮助,您需要告诉我们如何定义要保留的文本。是一行 '---' + 'Forecast' 到最后一行 '---' 还是其他什么东西,等等... regExp 可以完成这项工作,但我不知道确切的语法没有更多信息。

【讨论】:

    【解决方案3】:

    如果您可以假设只有 ------------- 行之间的内容是您想要的,请尝试以下正则表达式:-{40,}([\s\S](?=-{40,}))-{40,}

    Regex.Match(report, @"-{40,}([\s\S](?=-{40,}))-{40,}").Value
    

    【讨论】:

      【解决方案4】:

      看起来唯一分隔您的文本的是 ------------------------------------------------- -------------------------------- 字符。

      如何使用 string.Split()。这是一个例子:

      string[] textArray = wholeText.Split(new string[] {"---------------------------------------------------------------------"}, StringSplitOptions.RemoveEmptyEntries);
      
      string text = textArray[2];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 2012-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多