C# 试图找出这个正则表达式模式

C# 试图找出这个正则表达式模式,c#,regex,expression,C#,Regex,Expression,所以我有一个字符串,我试图从中去掉一些值。我一直在使用这个正则表达式测试程序来尝试解决这个问题,但没有用: 这是我试图解析的字符串: 9 2.27.8.18:2304 63 9dd0e5e7344adac5cf49b7882329df25(OK) Any number of characters follow here 基本格式如下: INT IP:PORT INT MD5-HASH(OK) STRING 到目前为止,这是我所能做到的: (?<line_id&g

所以我有一个字符串,我试图从中去掉一些值。我一直在使用这个正则表达式测试程序来尝试解决这个问题,但没有用:

这是我试图解析的字符串:

9   2.27.8.18:2304        63   9dd0e5e7344adac5cf49b7882329df25(OK) Any number of characters follow here
基本格式如下:

INT IP:PORT INT MD5-HASH(OK) STRING
到目前为止,这是我所能做到的:

(?<line_id>[0-9]{1,3})(?<ip>.+):(?<port>[0-9]{1,5})(?<guid>.+)\(OK\)(?<name>.+)

如果您尝试上面我发布的示例文本和模式,您可以看到,除了端口号和md5哈希(guid)之间的整数之外,我获得了所有内容。我可能犯了一些业余的错误,因为我对正则表达式模式没有太多经验,所以任何输入都会非常感激。

+
通常是个坏主意,因为它会贪婪地匹配字符串中的任何字符

(?<line_id>[0-9]{1,3})[\s]+(?<ip>[0-9\.]+):(?<port>[0-9]{1,5})[\s]+(?<int>[0-9]{1,5})[\s]+(?<guid>[a-z0-9]+)\(OK\)(?<name>.+)

+
通常是个坏主意,因为它会贪婪地匹配字符串中的任何字符

(?<line_id>[0-9]{1,3})[\s]+(?<ip>[0-9\.]+):(?<port>[0-9]{1,5})[\s]+(?<int>[0-9]{1,5})[\s]+(?<guid>[a-z0-9]+)\(OK\)(?<name>.+)

整数的捕获丢失。
我在这里添加了一个新的命名的backreference,名为
int

试试这个:

(?<line_id>[0-9]{1,3})(?<ip>.+):(?<port>[0-9]{1,5})\s+(?<int>[0-9]+)\s+(?<guid>.+)\(OK\)(?<name>.+)

最近的两组人太贪婪了。我建议不要使用
+
而是更好地确定需要捕获的字符范围。

整数的捕获丢失。
我在这里添加了一个新的命名的backreference,名为
int

试试这个:

(?<line_id>[0-9]{1,3})(?<ip>.+):(?<port>[0-9]{1,5})\s+(?<int>[0-9]+)\s+(?<guid>.+)\(OK\)(?<name>.+)

最近的两组人太贪婪了。我建议您不要使用
+
而是更好地确定需要捕获的字符范围。

您没有为该数字设置捕获组(本例中为63),该数字是随guid一起捕获的。我对您的模式进行了一些编辑:

(?<line_id>\d{1,3})\s*(?<ip>.+):(?<port>\d{1,5})\s*(?<number>\d+?)\s*(?<guid>[\da-f]+)\(OK\)(?<name>.+)
(?\d{1,3})\s*(?。+):(?\d{1,5})\s*(?\d+)\s*(?[\da-f]+)\(确定)(?。+)

请注意,我已将[0-9]集更改为\d,将guid设置为:[\da-f](以防它仅使用十六进制小写字符)。

您没有为该数字设置捕获组(在您的情况下为63),该数字是随guid一起捕获的。我已稍微编辑了您的模式:

(?<line_id>\d{1,3})\s*(?<ip>.+):(?<port>\d{1,5})\s*(?<number>\d+?)\s*(?<guid>[\da-f]+)\(OK\)(?<name>.+)
(?\d{1,3})\s*(?。+):(?\d{1,5})\s*(?\d+)\s*(?[\da-f]+)\(确定)(?。+)
请注意,我已将[0-9]集更改为\d,将guid设置为:[\da-f](以防它仅使用十六进制小写字符。

请尝试此设置

(?<line_id>[0-9]{1,3})\s+(?<ip>.+):(?<port>[0-9]{1,5})\s+(?<number>[0-9]+)\s+(?<guid>.+)\(OK\)(?<name>.+)
*请注意,用于标识63

的空格请尝试使用此空格

(?<line_id>[0-9]{1,3})\s+(?<ip>.+):(?<port>[0-9]{1,5})\s+(?<number>[0-9]+)\s+(?<guid>.+)\(OK\)(?<name>.+)

*请注意,用于标识63

的空间可能更容易检查分离器:

(?<line_id>[0-9]{1,3})(?<ip>.+):(?<port>[0-9]{1,5})\s+(?<nr>.*)\s+(?<guid>.+)\(OK\)(?<name>.+)
(?[0-9]{1,3})(?。+):(?[0-9]{1,5})\s+(?.*)\s+(?。+)\(确定)(?。+)

以下是一个示例:

检查分离器可能更容易:

(?<line_id>[0-9]{1,3})(?<ip>.+):(?<port>[0-9]{1,5})\s+(?<nr>.*)\s+(?<guid>.+)\(OK\)(?<name>.+)
(?[0-9]{1,3})(?。+):(?[0-9]{1,5})\s+(?.*)\s+(?。+)\(确定)(?。+)

这里有一个例子:

我想你应该看看下面的网站:-我相信你会发现它很有用:)谢谢,林德里安。这个网站似乎非常有用!我想你应该看看下面的网站:-我相信你会发现它很有用:)谢谢,林德里安。那个网站似乎非常有用!谢谢你的回答。绝对正确。感谢所有回应的人。我就知道我应该早点在这里发帖。再次感谢!谢谢你的回答。绝对正确。感谢所有回应的人。我就知道我应该早点在这里发帖。再次感谢!