首页 > 解决方案 > 从 vb.net 中的字符串中提取 IP 和端口

问题描述

我有字符串

Timestamp: 1594312360   Host: 127.0.0.1 ()        Ports: 22/open/tcp//ssh//
Timestamp: 1412355121   Host: 127.0.0.1 ()  Ports: 21/open/tcp//telnet//
Timestamp: 1594741231  Host: 127.0.0.1 ()        Ports: 8080/open/tcp//http//
Timestamp: 1232370123   Host: 127.0.0.1 ()  Ports: 443/open/tcp//https//

我想要一个只有 ip:Port

127.0.0.1:22
127.0.0.1:21
127.0.0.1:8080
127.0.0.1:443

如果使用正则表达式没问题,任何人都可以帮我这样做我正在使用 Vb.net

标签: vb.net

解决方案


将其拆分为空格(您的数据似乎包含空格而不是制表符),并设置了 RemoveEmptyEntries 选项:

For Each line in File.ReadLines("c:\temp\mylog.txt")

  'line is eg "Timestamp: 1594312360   Host: 127.0.0.1 ()        Ports: 22/open/tcp//ssh//"
  Dim array = line.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)

Next line

数组现在包含:

(0): Timestamp:
(1): 1594312360
(2): Host:
(3): 127.0.0.1 
(4): ()
(5): Ports: 
(6): 22/open/tcp//ssh//

您可以使用第三个索引和端口通过第 6 个或最后一个访问 IP(您选择的取决于您的数据在我们看不到的其他行中包含的内容)

您必须丢弃端口行中“/”的第一个索引之后的所有内容:

Dim port = array(6).Remove(array(6).IndexOf("/"c))

如果你想使用正则表达式(你应该在你的问题中指出;通过只问开放式“我怎么能?”它不会对如何施加任何限制......)你可以看看类似的东西:

Dim r = new Regex("Host: (?<ip>[0-9.]+).*?Ports: (?<p>\d+)")

Dim m = r.Match(line)

Console.WriteLine(m.Groups("ip").Value)
Console.WriteLine(m.Groups("p").Value)

正则表达式的意思

Host: (?<ip>[0-9.]+).*?Ports: (?<p>\d+)

Find Host: ,后跟多个数字或句点并将它们捕获到名为 ip 的组中,然后是任意数量的任何内容,直到 word Ports: ,然后是捕获到名为 p 的组中的任意数量的数字


推荐阅读