提取 List 从字符串中提取 indexOf 的位置

本文关键字:提取 indexOf 位置 字符串 List int | 更新日期: 2023-09-27 18:34:25

我想从字符串中获取一些"文本"的索引及其位置

string myString = "some text some text some text text text text";
int countOfText = myString.Select((c, i) => myString.Substring(i)).Count(sub => sub.StartsWith("some"));

在上面的代码中,我获得了"一些"的计数,如何获取带有其位置的列表?

提取 List<int> 从字符串中提取 indexOf 的位置

Regex.Matches(input,@"'bsome'b")
     .Cast<Match>()
     .Select(x=>x.Index);
您可以使用

正则表达式(@Anirudha答案)或linq执行此操作:

string myString = "some text some text some text text text text";
var res = myString
    .Select((c, i) => new { txt = myString.Substring(i), idx = i })
    .Where(sub => sub.txt.StartsWith("some"))
    .Select(a => a.idx).ToList();

(这似乎有点矫枉过正正,我自己更喜欢正则表达式版本)

最有效的

方法是在循环中使用String.IndexOf和起始索引:

List<int> positions = new List<int>();
int pos = myString.IndexOf("some", StringComparison.CurrentCultureIgnoreCase);
while (pos >= 0)
{
    positions.Add(pos);
    pos = myString.IndexOf("some", pos + "some".Length, StringComparison.CurrentCultureIgnoreCase);
}

结果:0, 10, 20

我使用StringComparison.CurrentCultureIgnoreCase来演示不区分大小写的比较。如果"Some"不应该计算,则不需要它。

这是一个扩展方法,它以这种方式帮助了我。 如果您想在代码中多次收集索引,我会使用它。

public static IEnumerable<int> AllIndexesOf(this string str, string searchstring)
{
    int minIndex = str.IndexOf(searchstring);
    while (minIndex != -1)
    {
        yield return minIndex;
        minIndex = str.IndexOf(searchstring, minIndex + searchstring.Length);
    }
}

用法:

string myString = "some text some text some text text text text";
List<int> Result = myString.AllIndexesOf("some");