C# 如何获得不同情况下的特定子字符串

C# 如何获得不同情况下的特定子字符串,c#,.net,C#,.net,我正在尝试从如下所示的字符串中提取用户名块 static void Main(string[] args) { List<string> Lines = new List<string>() { "[20:03:01 INFO]: UUID of player MyUsername123 is b87e1cbc-c67c-4026-a359-8659de8b4",

我正在尝试从如下所示的字符串中提取用户名块

static void Main(string[] args)
        {
            List<string> Lines  = new List<string>()
            {
                "[20:03:01 INFO]: UUID of player MyUsername123 is b87e1cbc-c67c-4026-a359-8659de8b4",
                "[21:03:10 INFO]: UUID of player Cool_Username is b7ecbc-c67c-4026-a359-8652f9de8b4",
                "[22:23:10 INFO]: UUID of player theuserN4m3 is b87eabc-c67c-4026-a359-8652ad9dssdse8b4",
                "[20:08:10 INFO]: UUID of player WhatANiceUsername is b87g1cbc-c67c-4026-a359-8652agde8b4",

            };

            foreach (var line in Lines)
            {
                //Get the username part
            }
        }
static void Main(字符串[]args)
{
列表行=新列表()
{
“[20:03:01信息]:播放器MyUsername123的UUID是b87e1cbc-c67c-4026-a359-8659de8b4”,
“[21:03:10信息]:玩家Cool_用户名的UUID是b7ecbc-c67c-4026-a359-8652f9de8b4”,
“[22:23:10信息]:用户N4M3的玩家UUID是b87eabc-c67c-4026-a359-8652AD9DSSE8B4”,
“[20:08:10信息]:玩家的UUID whattaniceUserName是b87g1cbc-c67c-4026-a359-8652agde8b4”,
};
foreach(行中的var行)
{
//获取用户名部分
}
}
用户名将是
MyUsername123
Cool\u Username
theuserN4m3
whantaniceusername

获取这些名称的最佳方式是什么?
我考虑过regex,但我不知道这是否会占用大量资源,然后是订阅,但我没有考虑如何获得特定部分,从什么索引开始,到哪里结束,因为所有用户名都可以有不同的长度。

执行按空格分割的字符串,包含数组索引5将包含用户名

public void SplitExample()
{
    List<string> Lines = new List<string>()
    {
       "[20:03:01 INFO]: UUID of player MyUsername123 is b87e1cbc-c67c-4026-a359-8659de8b4",
       "[21:03:10 INFO]: UUID of player Cool_Username is b7ecbc-c67c-4026-a359-8652f9de8b4",
       "[22:23:10 INFO]: UUID of player theuserN4m3 is b87eabc-c67c-4026-a359-8652ad9dssdse8b4",
       "[20:08:10 INFO]: UUID of player WhatANiceUsername is b87g1cbc-c67c-4026-a359-8652agde8b4",
    };

    foreach(var i in Lines)
    {
       var splitArray = i.Split(' ');
       Console.WriteLine(splitArray[5]);
    }
}
public void SplitExample()
{
列表行=新列表()
{
“[20:03:01信息]:播放器MyUsername123的UUID是b87e1cbc-c67c-4026-a359-8659de8b4”,
“[21:03:10信息]:玩家Cool_用户名的UUID是b7ecbc-c67c-4026-a359-8652f9de8b4”,
“[22:23:10信息]:用户N4M3的玩家UUID是b87eabc-c67c-4026-a359-8652AD9DSSE8B4”,
“[20:08:10信息]:玩家的UUID whattaniceUserName是b87g1cbc-c67c-4026-a359-8652agde8b4”,
};
foreach(行中的var i)
{
var splitArray=i.Split(“”);
Console.WriteLine(splitArray[5]);
}
}

我将字符串拆分为
空格
字符,然后获取用户名字段的索引(因为您说过它总是在同一个位置)


您可能希望在错误处理方面做得更好一些,但这应该可以让您开始了。

字符串本质上是一个
IEnumerable
,因此可以使用一点Linq来代替split。我们知道用户名从一个固定的位置开始,用户名中不允许有空格。有了这些知识,唯一未知的是用户名的长度。我们可以使用Linq中的
Skip()
TakeWhile()
扩展方法从字符串中提取用户名:

var usernames = lines.Select(
    line => new String(line.Skip(32).TakeWhile(c => !char.IsWhiteSpace(c)).ToArray()));

小提琴

另一种灵巧的解决方案:

  List<string> lines = new List<string>()
  {
      "[20:03:01 INFO]: UUID of player MyUsername123 is b87e1cbc-c67c-4026-a359-8659de8b4",
      "[21:03:10 INFO]: UUID of player Cool_Username is b7ecbc-c67c-4026-a359-8652f9de8b4",
      "[22:23:10 INFO]: UUID of player theuserN4m3 is b87eabc-c67c-4026-a359-8652ad9dssdse8b4",
      "[20:08:10 INFO]: UUID of player WhatANiceUsername is b87g1cbc-c67c-4026-a359-8652agde8b4",
  };

  IEnumerable<string> players = from line in lines select line.Split(' ')[5];
列表行=新列表()
{
“[20:03:01信息]:播放器MyUsername123的UUID是b87e1cbc-c67c-4026-a359-8659de8b4”,
“[21:03:10信息]:玩家Cool_用户名的UUID是b7ecbc-c67c-4026-a359-8652f9de8b4”,
“[22:23:10信息]:用户N4M3的玩家UUID是b87eabc-c67c-4026-a359-8652AD9DSSE8B4”,
“[20:08:10信息]:玩家的UUID whattaniceUserName是b87g1cbc-c67c-4026-a359-8652agde8b4”,
};
IEnumerable players=从行中的行选择line.Split(“”)[5];

用户名是否始终位于字符串的同一部分?第一个示例是否确实缺少“玩家XYZ Is…”的Is部分?或者这是一个输入错误?用户名总是在同一个地方,这是一个输入错误。这是一个好主意,我有这样的想法,但我想不起来,我会试试的!是的,这主意不错,实际上将在第6位(索引5)
  List<string> lines = new List<string>()
  {
      "[20:03:01 INFO]: UUID of player MyUsername123 is b87e1cbc-c67c-4026-a359-8659de8b4",
      "[21:03:10 INFO]: UUID of player Cool_Username is b7ecbc-c67c-4026-a359-8652f9de8b4",
      "[22:23:10 INFO]: UUID of player theuserN4m3 is b87eabc-c67c-4026-a359-8652ad9dssdse8b4",
      "[20:08:10 INFO]: UUID of player WhatANiceUsername is b87g1cbc-c67c-4026-a359-8652agde8b4",
  };

  IEnumerable<string> players = from line in lines select line.Split(' ')[5];