如何从多行字符串中提取动态长度字符串?

时间:2018-04-26 05:55:55

标签: c#

我正在使用" nslookup"从IP获取机器名称。

nslookup 1.2.3.4

输出是多行和机器名称的长度动态字符。我如何提取" DynamicLengthString"从所有输出。所有建议 IndexOf 拆分,但当我尝试这样做时,我对我来说不是一个好的解决方案。有什么建议吗?

Server:  volvo.toyota.opel.tata
Address:  5.6.7.8

Name:    DynamicLengthString.toyota.opel.tata
Address:  1.2.3.4

3 个答案:

答案 0 :(得分:1)

我没有正则表达式,这就是goold old c#way。

string input = @"Server:  volvo.toyota.opel.tata
Address:  5.6.7.8

Name:    DynamicLengtdfdfhString.toyota.opel.tata
Address:  1.2.3.4";

string targetLineStart = "Name:";
string[] allLines = input.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);

string targetLine = String.Empty;
foreach (string line in allLines)
    if (line.StartsWith(targetLineStart))
    {
        targetLine = line;
    }

System.Console.WriteLine(targetLine);

string dynamicLengthString = targetLine.Remove(0, targetLineStart.Length).Split('.')[0].Trim();


System.Console.WriteLine("<<" + dynamicLengthString + ">>");
System.Console.ReadKey();

这提取&#34; DynamicLengtdfdfhString&#34;从给定的输入,无论名称线在哪里,无论后来发生什么。 这是测试和控制台的控制台版本。验证它。

答案 1 :(得分:0)

您可以使用Regex

using System;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {

        string Content = "Server:  volvo.toyota.opel.tata \rAddress:  5.6.7.8 \rName:    DynamicLengthString.toyota.opel.tata  \rAddress:  1.2.3.4";
        string Pattern = "(?<=DynamicLengthString)(?s)(.*$)";
        //string Pattern = @"/^Dy*$/";
        MatchCollection matchList = Regex.Matches(Content, Pattern);
         Console.WriteLine("Running");

        foreach(Match match in matchList)
        {
             Console.WriteLine(match.Value);
        }
    }
}

答案 2 :(得分:0)

我会假设你的输出与你说的完全一样。

//bootstrap styling for errors
$.validator.setDefaults({
    highlight: function (element) {
        $(element).closest('.form-group').addClass('has-error');
    },
    errorElement: 'span',
    errorClass: 'help-block',
    errorPlacement: function (error, element) {
        if (element.parent('.input-group').length) {
            error.insertAfter(element.parent());
        } else {
            error.insertAfter(element);
        }
    }
});

请注意,这是一个准系统示例:

  • 在访问之前检查所有数组索引,或者准备好捕获string output = ExactlyAsInTheQuestion(); var fourthLine = output.Split(Environment.NewLine)[3]; var nameValue = fourthLine.Substring(9); //skips over "Name: " var firstPartBeforePeriod = nameValue.Split('.')[0]; //firstPartBeforePeriod should equal "DynamicLengthString"
  • 我假设&#34;名称之间的四个空格:&#34;和&#34; DynamicLengthString&#34;有四个空格。如果它们是制表符,则您需要将IndexOutOfRangeException方法调整为Substring(9)
  • 如果&#34; DynamicLengthString&#34;应该也有其价值的时期,那么我的答案不适用。在这种情况下,您需要使用正则表达式。

注意:我发现您已解雇Substring(6)

  

所有建议IndexOf和Split,但当我尝试这样做时,我对我来说不是一个好的解决方案。

但仅根据此说明,我们无法确定问题是在让Split工作,还是实际上无法用于您的情况。