【问题标题】:Extracting a block of text after the last instance of a specific string在特定字符串的最后一个实例之后提取文本块
【发布时间】:2020-05-16 22:15:05
【问题描述】:

我有一个文本文件,我需要在特定字符串的最后一个实例之后从中提取一段文本。为了更好地说明需要什么:

SpecificString#1:
 TextBlock#1
SpecificString#2:
 TextBlock#2
...
SpecificString#5:
 TextBlock#5

所有特定字符串都是相同的,并且实例的数量可能会有所不同。到目前为止,我可以使用以下代码在特定字符串的第一个实例之后提取所有 TextBlock:

const string separator = "SpecificString";
var separatorIndex = myTextFileString.IndexOf(separator, StringComparison.CurrentCultureIgnoreCase);
var requiredTextBlock = myTextFileString.Substring(separatorIndex + separator.Length);

但是,我只想抓取最后一个文本块(在本例中为 TextBlock#5)。我怎样才能做到这一点?

【问题讨论】:

  • 字符串类中有LastIndexOf方法。
  • 标签指南明确声明不要在问题标题中使用标签,除非它们是句子的有机组成部分。
  • var last = allText.Split(separator).Last();

标签: c# string split substring


【解决方案1】:

您可以使用String.LastIndexOf() 方法获取C# 中分隔符的最后一个索引。请看https://docs.microsoft.com/en-us/dotnet/api/system.string.lastindexof?view=netframework-4.8

一旦你知道了最后一个索引,你就可以按照上面提到的相同步骤来提取它后面的文本块。

【讨论】:

    【解决方案2】:

    也许你应该以不同的方式阅读文本文件。 例如:

    string[] allLinesInText = File.ReadAllLines(path);
    

    这会将文本文件中的每一行作为字符串数组返回,您可以从中过滤分隔符并轻松索引块

    const string separator = "SpecificString";
    var allLines=allLinesInText.Where(x=>!x.Contains(separator));
    

    如果文本文件包含单个字符串,您必须尝试其他建议的答案。

    【讨论】:

      猜你喜欢
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 1970-01-01
      相关资源
      最近更新 更多