如何从字符串中分离数据

How to separate data from the string

我正在尝试获取我的网络上连接的所有计算机的列表,我能够这样做。

但是我需要获取我以字符串格式存储的 IP 地址的 Hostanme 以及一些其他数据,例如 mac 地址。

我试过使用 json 但无法从字符串中获取 IP 列表。我只是从字符串中获取 ip 列表,以便使用 Foreach 我可以在该特定位置找到主机名。

代码如下:

  static void Main(String[] args)
  {
        Process arp = new Process();
        arp.StartInfo.UseShellExecute = false;
        arp.StartInfo.RedirectStandardOutput = true;
        arp.StartInfo.FileName = "C://Windows//System32//cmd.exe";
        arp.StartInfo.Arguments = "/c arp -a";
        arp.StartInfo.RedirectStandardOutput = true;
        arp.Start();
        arp.WaitForExit();
        string output = arp.StandardOutput.ReadToEnd();
        Console.WriteLine(output);

        Console.WriteLine(data.Internet_Address);
        Console.ReadLine();            
    }
}

这是输出:

您可以使用正则表达式通过 Regex.Matches

提取 IP
var matches1 = Regex.Matches(output, @"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");    

第一个IP你可能不需要可以跳过

for(int i=1; i < matches1.Count; i++)
     Console.WriteLine("IPs " + i + "\t" + matches1[i].Value);

一般会使用正则表达式来解析这样的文本。或者,您可以获得 CSV 库来解析类似的格式,或者如果这只是一次性情况,基本 String.Split 就可以了。

var byLine = output.Split('\n') // split into lines
   .Skip(1); // skip header
var ips = byLine.Select(s => s.Split(' ')[0]);

备注:

  • 通过直接调用而不是调用命令行工具来获取您正在寻找的信息可能更好
  • 本地地址一般没有"hostnames"。 Windows 机器名称不必作为 DNS 条目可见。