提取 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"));
在上面的代码中,我获得了"一些"的计数,如何获取带有其位置的列表?
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");