2014-04-01 113 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將包含硬件地址的數組