从字符串中提取部分字符串?

时间:2014-04-01 08:35:23

标签: c# regex string visual-studio-2013

您好我的应用程序有问题我想从字符串中获取字符串的一部分。情况是我有一个名为stringData的字符串变量,它存储以下值:

IP Address         Hardware Address         Lease expiration                Type
192.168.1.2        00-23-8B-87-9A-6B        Mon Jan 02 01:14:00 2006        Dynamic
192.168.1.3        F8-F7-D3-00-03-80        Mon Jan 02 01:14:00 2006        Dynamic 
192.168.1.4        F8-F7-D3-00-9C-C4        Mon Jan 02 01:14:00 2006        Dynamic 
192.168.1.5        F0-DE-F1-33-9C-C4        Mon Jan 02 01:14:00 2006        Dynamic 

我只想从Hardware Address开始F8-F7-D3-00。我现在使用substring方法,但我只获得一个匹配的硬件地址,但可能有多个字符串,如上所述,我想要所有这些。我正在使用C#。 任何帮助都会非常值得赞赏。

4 个答案:

答案 0 :(得分:1)

试试这个:

string pattern = @"(F8-F7-D3-00\S+)";
string input = "IP Address         Hardware Address         Lease expiration                Type\n"+
    "192.168.1.2        00-23-8B-87-9A-6B        Mon Jan 02 01:14:00 2006        Dynamic\n"+
    "192.168.1.3        F8-F7-D3-00-03-80        Mon Jan 02 01:14:00 2006        Dynamic \n"+
    "192.168.1.4        F8-F7-D3-00-9C-C4        Mon Jan 02 01:14:00 2006        Dynamic \n"+
    "192.168.1.5        F0-DE-F1-33-9C-C4        Mon Jan 02 01:14:00 2006        Dynamic";

MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
   Console.WriteLine("Hardware Address: {0}", match.Groups[1].Value);
}

答案 1 :(得分:0)

首先将字符串拆分为单独的行:

        string[] linesep = new string[] {"\r\n"};
        string[] dataLines = stringData .Split(linesep, StringSplitOptions.RemoveEmptyEntries);

然后将Substring方法应用于每个:

foreach (line in dataLines)
{
    if (line.Contains(yourIPstring)
    // .. do your stuff
}

您可能需要更改行分隔符。

答案 2 :(得分:0)

您可以轻松使用正则表达式

var file = File.ReadAllText(@"....\Input.txt");

Regex r = new Regex("F8-F7-D3-00(-[0-9A-F]{2}){2}");
var matches = r.Matches(file);
foreach (Match m in matches)
{
    Console.WriteLine(m.Value);
}

答案 3 :(得分:0)

如果字符串包含标签,您可以将其拆分为' / t' (水平标签)。

string hardwareAddresses = stringData.split('/t').ToList().Where((item, index) => index % 4 == 1);

hardwareAddresses将包含一个硬件地址数组