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

C# 如何从多行字符串中提取动态长度字符串?,c#,C#,我正在使用nslookup从IP获取机器名 nslookup 1.2.3.4 输出为多行和机器名的长度动态字符。如何从所有输出中提取DynamicLengthString。所有的建议都是IndexOf和Split,但当我尝试这样做时,我并不是一个好的解决方案。有什么建议吗 Server: volvo.toyota.opel.tata Address: 5.6.7.8 Name: DynamicLengthString.toyota.opel.tata Address: 1.2.3

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

nslookup 1.2.3.4
输出为多行和机器名的长度动态字符。如何从所有输出中提取DynamicLengthString。所有的建议都是IndexOf和Split,但当我尝试这样做时,我并不是一个好的解决方案。有什么建议吗

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

Name:    DynamicLengthString.toyota.opel.tata
Address:  1.2.3.4
你可以使用正则表达式

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

我假设你的输出和你说的一模一样

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"
请注意,这是一个简单的示例:

在访问所有数组索引之前检查它们,或者准备捕获IndexOutofRangeException。 我假设Name:和DynamicLengthString之间的四个空格是四个空格。如果它们是制表符,则需要将Substring9方法调整为Substring6。 如果DynamicLengthString的值中也应该有句点,那么我的答案不适用。在这种情况下,您需要使用正则表达式。 注意:我知道您已驳回拆分:

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


但是,仅根据这一描述,不可能知道问题是在拆分工作中,还是在您的情况下它实际上不可用。

我在没有正则表达式的情况下使用了古旧的c方式

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();
这将从给定的输入中提取DynamicLengtdfdfhString,不管名称行在哪里,也不管后面发生什么。
这是用于测试和验证它的控制台版本。

请告诉我们您尝试了什么。如何识别DynamicLengthString?没有标识,它的机器名。我只想提取thatvar matches=Regex.Matchess,@?没有模式,它来自控制台输出。有点像BKI、SMI、EKFY等。尝试更新代码。需要根据您的内容进行简单的更改