C# 确定关键字周围单词的有效方法是什么?

C# 确定关键字周围单词的有效方法是什么?,c#,C#,例如: 您有一个字符串,如var str=“Pete很棒,John很高兴,Pete在这里”。 关键字是单词is。 然后我希望输出是一个包含两个元组的数组,如中所示 [(Pete,(great,here)),(John,happy)] 现在,我将从IndexOf开始,转到Substring并以foreach结束,然后修改创建一个新类来存储中间的子数组(在示例中,这里是) 关于代码行和内存/cpu的有效方法是什么?也许这种方法足以满足您的需求。为您的搜索结果创建一个类: public class

例如: 您有一个字符串,如
var str=“Pete很棒,John很高兴,Pete在这里”。
关键字是单词
is
。 然后我希望输出是一个包含两个元组的数组,如中所示

[(Pete,(great,here)),(John,happy)]
现在,我将从
IndexOf
开始,转到
Substring
并以
foreach
结束,然后修改创建一个新类来存储中间的子数组(在示例
中,这里是


关于代码行和内存/cpu的有效方法是什么?

也许这种方法足以满足您的需求。为您的
搜索结果创建一个类

public class SearchResult
{
    public string Identifier { get; set; }
    public IList<string> Descriptions { get; set; }
    public IList<int> Indexes { get; set; }
}
结果(LinqPad):

您可能需要在拆分数组中添加标点符号,如
[,;:!?]

如果不想使用LINQ,请在循环中填写
字典

var str = "Pete is great and John is happy and Pete is here";
string[] words = str.Split(new string[0], StringSplitOptions.RemoveEmptyEntries);
SearchResult[] results = words
    .Select((w, ix) => (Word: w, Index: ix))
    .Where(x => x.Word.Equals("is", StringComparison.CurrentCultureIgnoreCase) && x.Index > 0 && x.Index < words.Length-1)
    .Select(x => (Identifier: words[x.Index - 1], Description: words[x.Index + 1], x.Index))
    .GroupBy(x => x.Identifier)
    .Select(g => new SearchResult 
    {
        Identifier = g.Key,
        Indexes = g.Select(x => x.Index).ToArray(),
        Descriptions = g.Select(x => x.Description).ToArray()
    })
    .ToArray();