2012-01-10 86 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)