我想让IndexOf获得一些“Text”及其在字符串中的位置
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"));
在上面的代码中我得到了“some”的数量,如何获得List的位置?
答案 0 :(得分:3)
Regex.Matches(input,@"\bsome\b")
.Cast<Match>()
.Select(x=>x.Index);
答案 1 :(得分:0)
最有效的方法是在带有起始索引的循环中使用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"
不应计算,您就不需要它。
答案 2 :(得分:0)
您可以使用Regex(@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();
(这似乎有点矫枉过正,我更喜欢自己的正则表达式版本)
答案 3 :(得分:0)
这是一种帮助我这样做的扩展方法。如果你想在你的代码中多次收集索引,我会使用它。
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");