2014-04-01 66 views
1

你好我有我的应用程序的问题,我想是我有以下值命名为stringData IT卖场一个字符串变量从string.The情况字符串的一部分:从字符串中提取部分字符串?

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#。 任何帮助将非常可观。

+0

如何您使用的是'子()'的时刻? –

+0

stringData是一行还是整个表格式的文本? – Robert

+0

Robert ..它是一个像文本 – TheSpy

回答

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

工作成功:) – TheSpy

0

分割字符串分成几行第一个是这样的:

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

那么你的子字符串的方法适用于每个:

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

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

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

如果字符串包含标签,你可以通过“/ T”(水平制表)拆呢。然后

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

hardwareAddresses将包含硬件地址的数组