我有一个类似“ ________ ______________的字符串,当行为立即被删除,从而增加了未来行为的厌恶行为________时,就会发生”

我要返回的数组或列表具有每个下划线区域的第一个和最后一个索引位置。

例如在我的示例中,我会得到(0,7,9,9,21,101,108)

这6个数字是三个下划线部分的开始和结束的索引-第一个“空白”从索引1开始并在索引7处结束,第二个“空白”在位置9处开始并在21处结束,依此类推。

到目前为止,这是我所做的,但是我被卡住了

public List<int> GetPositions(string source, string searchString)
{
    List<int> ret = new List<int>();
    int len = searchString.Length;
    int start = -len;
    while (true)
    {
        start = source.IndexOf(searchString, start + len);
        if (start == -1)
        {
            break;
        }
        else
        {
            ret.Add(start);
        }
    }
    return ret;
}

最佳答案

您可以为此使用一个简单的正则表达式:

var matches = Regex.Matches(s, "_+");
var result = new List<int>();
foreach(Match m in matches)
{
    result.Add(m.Index);
    result.Add(m.Index + m.Length - 1);
}
Console.WriteLine(String.Join(", ", result));


工作示例:https://dotnetfiddle.net/GX9MXR

如果要避免在单词中加下划线,也可以使用@"\b_+\b"

关于c# - 查找子字符串的开始索引和结束索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49540358/

10-13 06:52