如何从字符串中分离数据

时间:2017-03-17 05:48:40

标签: c# .net regex string arp

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

但是我需要获得我用String格式存储的Ip地址的Hostanme以及其他一些数据,如mac地址。

我尝试过使用json但是无法从String中获取Ip列表。我只是从String列出了ip,所以使用Foreach我可以找到该特定的主机名。

以下是代码:

<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/hsvClosetFilter"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_below="@+id/rlt"
    android:layout_marginTop="5dp"
    tools:context="com.example.rohantaneja.horizontalscrollview.MainActivity">

    <LinearLayout
        android:id="@+id/viewCategoryNames"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="horizontal" />

</HorizontalScrollView>

这是输出:

http://prntscr.com/ekyy1d

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式使用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);

答案 1 :(得分:0)

通常会使用正则表达式来解析此类文本。或者,您可以使用CSV库来解析类似的格式,或者如果这只是基本String.Split的一次性案例。

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

注意:

  • 最好通过直接调用获取您正在寻找的信息,而不是调用命令行工具
  • 本地地址通常没有“主机名”。 Windows机器名称不一定显示为DNS条目。