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

本文关键字:字符串 提取部 | 更新日期: 2023-09-27 17:55:55

嗨,我的应用程序有问题,我想要字符串中的一部分字符串。情况是我有一个名为 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 AddressF8-F7-D3-00开始.我现在正在使用substring方法,但我只得到一个匹配的硬件地址,但可能存在上述多个字符串,例如我想要所有这些字符串。我正在使用 C#。任何帮助都将是非常可观的。

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

试试这个:

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);
}

首先将字符串拆分为单独的行,如下所示:

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

然后将子字符串方法应用于每个:

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

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

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

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);
}

如果字符串包含制表符,则可以将其拆分为"/t"(水平制表符)。

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

然后,硬件地址将包含硬件地址数组