c# - 获取字符串第 n 次出现的索引?

标签 c# .net string indexing indexof

除非我遗漏了一个明显的内置方法,否则获取字符串中第 n 次出现的最快方法是什么?

我意识到我可以循环 IndexOf方法通过在循环的每次迭代中更新其起始索引。但这样做对我来说似乎很浪费。

最佳答案

您确实可以使用正则表达式 /((s).*?){n}/ 来搜索第 n 次出现的子字符串 s

在 C# 中它可能看起来像这样:

public static class StringExtender
{
    public static int NthIndexOf(this string target, string value, int n)
    {
        Match m = Regex.Match(target, "((" + Regex.Escape(value) + ").*?){" + n + "}");

        if (m.Success)
            return m.Groups[2].Captures[n - 1].Index;
        else
            return -1;
    }
}

注意:我在原来的解决方案中添加了Regex.Escape,以允许搜索对正则表达式引擎有特殊意义的字符。

关于c# - 获取字符串第 n 次出现的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/186653/

相关文章:

javascript - 在 Javascript 中匹配一个词后查找下一个词

java - 字符串到方法(调用)抛出异常

python - 需要有关字符串格式的帮助

c# - 从 IList 中选择元素序列

c# - 如何在另一个应用程序域中设置静态 bool 值?

c# - 需要高效稳定的 PriorityQueue 实现

c# - .net 中 ObservableCollection 的用途是什么?

c# - 对象引用未设置为 MVC 文件(图像)上传的对象实例

c# - 在 C# (web api) 中测试经过身份验证的方法(使用不记名 token )的正确方法

C# NullReference 异常和 ReSharper 建议