2012-01-10 91 views
1

一審我與它回車字符串我他們使用下面的分分離:C#得到字符串

string[] RemoveEmptySpace = result.Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries); 

所以變成這樣:

Server: xxx 
Address: xxx.xxx.11.10 

Non-authoritative answer: 
Name: test.com 
Address: xxx.xxx.888.555 

現在我的問題是我如何獲得地址數字的第一個實例而不是文本eg'xxx.xxx.11.10'?字符串來自NSLOOKUP所以它是動態的位置可能會改變......

感謝

+1

拆分每分裂與'再次項:'作爲分隔符,並採取第二部分。 – 2012-01-10 11:17:04

+0

'string address = RemoveEmptySpace [1] .Replace(「Address:」,「」)。修剪();' – ThePower 2012-01-10 11:17:27

+0

上面的示例字符串,是否總是相同?或者我可以假設它可以是任何具有IP地址的字符串集合? – 2012-01-10 11:25:01

回答

1

您可以迭代從split獲得的字符串集合,並解析以「Address」開頭的字符串。即是這樣的:

string[] RemoveEmptySpace = ...; 

// ... 
foreach (string line in RemoveEmptySpace) 
{ 
    if (line.StartsWith("Address:")) 
    { 
     string[] segments = line.Split(new char[1] { ':' }, StringSplitOptions.RemoveEmptyEntries); 

     // Use the second segment, as this should be the value 
     string value = segments[1].Trim(); 

     // Note: You now have the string representation of the Address numbers. 

     // Stop searching for more addresses 
     break; 
    } 
} 
+0

這就是我的想法,但如果有一個值,它將包含第二個地址... – Zaki 2012-01-10 11:24:04

+0

只要您點擊第一個地址,就可以突破該操作。看到我編輯的答案。 – 2012-01-10 11:28:35

+0

謝謝你的伴侶做到了。非常感謝大家 – Zaki 2012-01-10 11:44:53

2

剛剛打破串兩個部分(即,在創建字符串再次應用Split(...)功能)。

string[] add= arrayStr[1].Split(':'); 
Console.WriteLine("address" + add[1]); // TODO: verify syntax 
+0

是的,我可以做到這一點,但如果第二個位置數組是一些其他字符串cuz該字符串來自在cmd命令中運行nslookup,它可能會改變 – Zaki 2012-01-10 11:20:37

+0

如果您檢查第一部分('add [0]')是「地址」那麼你可以知道它是否是你想要的字符串。 – NibblyPig 2012-01-10 11:28:54

0

迭代數組RemoveEmptySpace

檢查過,如果字符串在當前索引,StartsWith「地址:」

如果是,與:分裂,並在獲取價值索引[1]

break的迭代。

0

或者到拆分方法,您可以使用正則表達式:

Regex addrParser = new Regex(@"Address:\s+([\d\.]+)", RegexOptions.Multiline); 
string address = null; 
if (addrParser.IsMatch(result)) { 
    address = addrParser.Match(result).Groups[1].Value; 
} 

這按預期工作:

r = new Regex(@"Address:\s+([\d\.]+)", RegexOptions.Multiline); 
r.IsMatch("Address: 123.456.888.555"); // true 

它尋找到一個小抄是有用的:http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet

+0

真的嗎? C#何時開始支持New(大寫N)?你的反斜槓也是可怕的錯誤。如果你要提供代碼,至少要確保它有一個有效的語法。 -1 – adelphus 2012-01-10 11:33:30

+0

@adelphus我添加了缺少的@,糾正了'新'錯字,並改進了正則表達式。感謝您的評論,但也許您未來可能會更友好些。 :) – ANeves 2012-01-10 12:15:47

+0

啊,我試試。就目前而言,我會滿足於即使在第二次嘗試之後,代碼依然無法編譯的知識。 – adelphus 2012-01-10 14:58:20

1

做完拆分後,執行以下操作:

var firstAddress = 
    (from line in RemoveEmptySpace 
    let split = line.Split(new[] { ':' }) 
    where split[0] == "Address" 
    select split[1]).First(); 

(您可能需要在文件的開頭添加using System.Linq;才能正常工作)

2

正則表達式是您的朋友。假設你的結果總是包含短語"Address: nnn.nnn.nnn.nnn",你可以簡單地做:

Match m = Regex.Match(result, "Address\\:\\s*(\\d+(\\.\\d+)+)"); 
if (m.Success) { 
    string address = m.Groups[1]; // m.Groups[1] returns the dotted address part 
} 

你可以爲你的陣列中的每個元素進行匹配,但它可能更容易只是使用result字符串。

+0

+1您可以通過在字符串前加'@'並刪除雙反斜槓來使正則表達式更具可讀性。 – ANeves 2012-01-10 13:10:32

0

使用此功能:

static String getAddress(String[] Haystack) 
{ 
    foreach(String line in Haystack) 
    { 
     if(line.Substring(0, 8) == "Address:") 
      return line.Substring(10); 
    } 
    return ""; 
} 

你可以這樣調用:

getAddress(RemoveEmptySpace)