C# 解析字符串中以@character开头的单词

C# 解析字符串中以@character开头的单词,c#,parsing,C#,Parsing,我必须编写一个程序,解析以@开头的单词的字符串,并返回带有@符号的单词 我试过这样的方法: char[] delim = { '@' }; string[] strArr = commenttext.Split(delim); return strArr; 但它返回数组中不带@的所有单词 我需要一些非常直截了当的东西。没有林肯喜欢的东西 如果字符串是abc@ert@xyz,那么我应该返回@ert和@xyz。如果您将单词定义为以空格分隔,那么这将起作用: string[] strArr = c

我必须编写一个程序,解析以@开头的单词的字符串,并返回带有@符号的单词

我试过这样的方法:

char[] delim = { '@' };
string[] strArr = commenttext.Split(delim);
return strArr;
但它返回数组中不带@的所有单词

我需要一些非常直截了当的东西。没有林肯喜欢的东西


如果字符串是abc@ert@xyz,那么我应该返回@ert和@xyz。

如果您将单词定义为以空格分隔,那么这将起作用:

string[] strArr  = commenttext.Split(' ')
                              .Where(w => w.StartsWith("@"))
                              .ToArray();
如果需要更复杂的东西,正则表达式可能更合适

我需要一些非常直接的东西。没有LINQ喜欢的东西>

非Linq等效物为:

var words = commenttext.Split(' ');
List<string> temp = new List<string>();
foreach(string w in words)
{
   if(w.StartsWith("@")) 
       temp.Add(w);
}
string[] strArr = temp.ToArray();

如果您反对使用Linq,除非您被要求使用较旧的.NET版本,否则您不应该使用Linq,沿着这些思路的方法将适合您的需要

string[] words = commenttext.Split(delimiter);

for (int i = 0; i < words.Length; i++)
{
    string word = words[i];
    if (word.StartsWith(delimiter))
    {
        // save in array / list
    }
}
注意:此方法至少需要System.Linq和.NET 3.5。
 const string test = "@Amir abcdef @Stack @C# mnop xyz";
        var splited = test.Split(' ').Where(m => m.StartsWith("@")).ToList();
        foreach (var b in splited)
        {
            Console.WriteLine(b.Substring(1, b.Length - 1));
        }
        Console.ReadKey();