vb.net - 从 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
解决方案
将其拆分为空格(您的数据似乎包含空格而不是制表符),并设置了 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 的组中的任意数量的数字
推荐阅读
- javascript - 如何删除从各个元素动态创建的事件侦听器?
- laravel - 在 laravel 关系中执行查询
- python - 私有名称修改( __A 与 __A__ )
- nginx - Docker-Compose 无法从网络访问我的 http
- php - 如果mysql中没有记录,php显示默认图像
- c++ - 向量和其他容器如何在磁盘上工作?
- typescript - 使用 express-validator 时未键入 Express 请求处理程序
- django - 如果 Django 崩溃,在生产模式下会发生什么?
- python - 如何使用 for 循环创建 numpy 数组
- c++ - 我可以通过取每个数字的模数并求和来计算大数的模数吗?