C#-从输出中获取特定文本

C#-从输出中获取特定文本,c#,listbox,split,minecraft,C#,Listbox,Split,Minecraft,我有一个服务器包装器,它基本上从控制台获取输出,并为minecraft提供额外的功能 有一个球员名单上的一面,我想名单显示连接的球员 Here is the output for a player Joining: 2012-05-17 17:56:32 [INFO] name [/192.168.0.16:50719] logged in with entity id 1873 at ([world] -34.8881557254211, 63.0, 271.69999998807907)

我有一个服务器包装器,它基本上从控制台获取输出,并为minecraft提供额外的功能

有一个球员名单上的一面,我想名单显示连接的球员

Here is the output for a player Joining:
2012-05-17 17:56:32 [INFO] name [/192.168.0.16:50719] logged in with entity id 1873 at ([world] -34.8881557254211, 63.0, 271.69999998807907)

Output for player leaving:
2012-05-17 17:58:03 [INFO] name lost connection: disconnect.quitting
加入时如何将玩家添加到列表中,退出时如何删除


任何帮助都会很好,谢谢。

有点粗糙,但这应该可以:

var input = "2012-05-17 17:56:32 [INFO] name [/192.168.0.16:50719] logged in with entity id 1873 at ([world] -34.8881557254211, 63.0, 271.69999998807907)";

var name = Regex.Matches(input, @"\]\s(.+?)\s")[0].Groups[1].Value;

更多的是部分回答:

假设您正在解析控制台输出并相应地响应消息,那么您是否可以解析字符串以查看它是否包含某个短语,例如“登录”和“断开连接”?您可以使用正则表达式从字符串中获取所需的标记,以从消息中构建对象。我假设“name”是玩家的名字-在这种情况下你甚至不需要使用regex-玩家在minecraft服务器上可以有重复的名字吗

如果没有,那么您应该能够使用此令牌作为字典的密钥,例如

Dictionary<string, playerObject>

你能不能提供更多的信息,说明你到目前为止掌握了什么以及你在用什么技术写这篇文章?还有一些考虑因素(因为标签中有listbox,我假设它是winforms),例如绑定,并且根据使用的技术,方法可能略有不同

您最好将播放器存储在字典(地图)中,然后可以按名称添加和删除它们

要捕获名称,可以使用正则表达式,或者看起来可以从名称的位置开始获取子字符串,因为这看起来是一致的

string name=outputString.Substring(27)

然后,您可以在一个空间上拆分,并在位置0处获取结果


name=name.Split(“”)[0]

我尝试过拆分文本,但过去我没有太多处理字符串的工作。它只是失败了!为什么在playername应该在的地方有一个带端口的IP?人们的名字中可以有空格吗?不,只有一个单词的用户名谢谢你的帮助,我不太确定如何使用它,我还没有做很多这方面的工作。我对C有点不屑一顾。我已经使用VB.NET多年了。就我而言,它们是一个,而且是一样的:)只是不同的语法是大约98%的差异!到目前为止是否要发布“接收消息”代码?另外-使用Dave Bishs regex,他发布了-使用regex类(System.Text.RegularExpressions命名空间)并传递字符串作为输入,这应该返回用户名是的,我只有15岁,我还没有学会所有东西,但我注意到类似的语法,它就是.NET框架,你每天都会学到一些新东西-我相信我已经使用它大约一年了,直到我意识到System.IO.Path可以帮助组合路径/文件名,而不会与斜杠等混淆:)就像你说的,你每天都会学到一些东西-我刚学会System.IO.Path-我一直在使用\\。Facepalm。将此与Charleh的答案结合起来,几乎拥有您所需的所有代码。是的,假设消息格式没有改变,这应该可以很好地工作-节省对任何正则表达式的需要。
private void OnNewMessage(string message) 
{
   if(message.Contains("logged in")) 
   {
      // Build player object
      // some code here ... to parse the string

      // Add to player dictionary
      PlayerDict.Add(playerName, newPlayerObject);
   }
   else if(message.Contains("disconnect")) 
   {
      // Find the player object by parsing the string
      PlayerDict.Remove(playerName);
   }
}