C# 如何从多行字符串中提取动态长度字符串?
我正在使用nslookup从IP获取机器名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 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等。尝试更新代码。需要根据您的内容进行简单的更改