使用现有数据从 ipconfig 中提取数据的正则表达式

Regex to extract data from ipconfig using existing data

我有以下提取键值对的正则表达式,效果很好。我已经通过另一个系统从许多机器上接收到这些数据,我宁愿使用我已经拥有的数据,也不愿使用 WMI 再次获取数据。

(^.*?)[^\w]+\:\s(.*?$|\n\r)$

问题 - 1 - 我还希望能够使用单独的正则表达式提取适配器名称。你能帮忙吗

问题 - 2 - 我的正则表达式不提取值列表。例如DNS 后缀搜索列表或 DNS 服务器列表。

我的源数据如下。感谢任何帮助

Windows IP Configuration

   Host Name . . . . . . . . . . . . : abcmyhost
   Primary Dns Suffix  . . . . . . . : parker.industries
   Node Type . . . . . . . . . . . . : Hybrid-GLS
   IP Routing Enabled. . . . . . . . : YES
   WINS Proxy Enabled. . . . . . . . : YES
   DNS Suffix Search List. . . . . . : parker1.industries
                                       parker2.industries
                                       parker3.industries
                                       parker4.industries
                                       parker5.industries
                                       parker6.industries
                                       parker7.industries
                                       parker8.industries
                                       parker9.industries
                                       parker10.industries

Ethernet adapter Ethernet 5:

   Connection-specific DNS Suffix  . : parker.industries
   Description . . . . . . . . . . . : Ready 2
   Physical Address. . . . . . . . . : 60-11-11-31-09-XY
   DHCP Enabled. . . . . . . . . . . : NO
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : AB80::11FG:1KI:LK9F:12N2%19(Preferred) 
   IPv4 Address. . . . . . . . . . . : 111.222.333.444(Preferred) 
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Lease Obtained. . . . . . . . . . : Monday, November 11, 2019 6:23:03 AM
   Lease Expires . . . . . . . . . . : Wednesday, November 13, 2019 6:51:30 AM
   Default Gateway . . . . . . . . . : 111.11.131.1
   DHCP Server . . . . . . . . . . . : 111.22.144.199
   DHCPv6 IAID . . . . . . . . . . . : 87244642462
   DHCPv6 Client DUID. . . . . . . . : 00-01-02-03-04-05-06-07-08-09-10-11-E9-G7
   DNS Servers . . . . . . . . . . . : 111.22.111.254 
                                       111.22.112.254
                                       111.33.113.254
                                       111.33.114.254
   NetBIOS over Tcpip. . . . . . . . : Enabled

有点复杂,但你可以简化它,

(?i)^\s{3,}(DNS[^.:]*)[^:\r\n]*:\s*(?:(?:[a-z0-9]*\.[a-z0-9]*[\r\n]\s{10,})+[a-z0-9]*\.[a-z0-9]*)|(?:(?:(?:\d+\.){3}\d+)\s*)+(?:(?:\d+\.){3}\d+)|^\s{3,}(?:[^.:]*)[^:\r\n]*:\s*(.*)$|^([^:]+):$|^(.*)$

我不确定其他示例的外观。

写这种表情的关键是交替。我们会首先选择最复杂的模式,然后继续选择简单的模式(类似于 FizzBu​​zz)。

在这里,我们最复杂的图案是多线图案。收集之后,剩下更简单的线条。


如果您希望 simplify/modify/explore 表达式,regex101.com. If you'd like, you can also watch in this link 的右上面板已对其进行说明,它将如何匹配一些样本输入。


正则表达式电路

jex.im 可视化正则表达式:

问题 #1 的答案:

/adapter (.*):/

只要使用不同类型的适配器(以太网、无线等)就可以了。

您还可以获得添加另一个类型的类型 (.*)

(.*) adapter (.*):/

如果您可以使用 \G 锚点来获得重复匹配以获得例如 DNS Suffix Search List 的列表,您可以使用:

(?:(^[^:\r\n]+):?[\r\n]+|\G(?!^))\r?\n[^:\r\n]+ : ([^\r\n]+(?:\r?\n(?!.* : )[ \t]+[^\r\n]+)*)

部分

  • (?:非捕获组
    • ( 捕获 组 1
    • ^[^:\r\n]+ 从 string
    • 开始匹配除 : 或换行符以外的任何字符 1+ 次
    • ) 关闭组 1
    • :?[\r\n]+ 匹配可选 : 并匹配 1+ 换行符
    • |
    • \G(?!^) 在上一场比赛结束时声明位置,而不是在开始时
  • )关闭非捕获组
  • \r?\n[^:\r\n]+ 匹配换行符,然后匹配除 : 或换行符
  • 之外的任何字符 1+ 次
  • : 匹配 space、: 和 space
  • ( 捕获 第 2 组
    • [^\r\n]+ 匹配除换行符以外的任何字符 1 次以上
    • (?:非捕获组
      • \r?\n 匹配一个换行符
      • (?!.* : )断言下一行不包含 :
      • [ \t]+[^\r\n]+ 匹配 1+ space 或制表符和 1+ 次任何字符,换行符除外
    • )*关闭群重复0+次
  • ) 关闭组 2

Regex demo