从字符串中提取部分字符串
本文关键字:字符串 提取部 | 更新日期: 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 Address
从F8-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);
然后,硬件地址将包含硬件地址数组