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

时间:2019-11-13 02:51:43

标签: regex parsing regex-lookarounds

我有以下正则表达式提取了效果很好的键值对。我已经从另一台计算机上通过另一个系统接收了此数据,我希望使用已经拥有的数据,而不是使用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

3 个答案:

答案 0 :(得分:1)

回答问题1:

/adapter (.*):/

只需假设使用不同类型的适配器(以太网,无线等)即可。

您也可以添加另外一个(.*)

(.*) adapter (.*):/

答案 1 :(得分:1)

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

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

部分

  • (?:非捕获组
    • (捕获第1组
    • ^[^:\r\n]+从字符串开头开始,匹配除:或换行符以外的任意字符1倍以上
    • )关闭第1组
    • :?[\r\n]+匹配可选的:并匹配1条以上的换行符
    • |
    • \G(?!^)在上一场比赛的末尾而不是在开始时断言
  • )关闭非捕获组
  • \r?\n[^:\r\n]+匹配换行符,然后匹配除:或换行符之外的任意字符的1倍以上
  • : 匹配空格,:和空格
  • (捕获第2组
    • [^\r\n]+匹配除换行符以外的任意字符1倍以上
    • (?:非捕获组
      • \r?\n换行符
      • (?!.* : )断言下一行不包含 :
      • [ \t]+[^\r\n]+匹配1个以上空格或制表符,并匹配除换行符以外的所有字符的1次以上
    • )*关闭组并重复0次以上
  • )关闭第2组

Regex demo

答案 2 :(得分:0)

这有点复杂,但是您可以简化一下,

(?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)。

在这里,我们最复杂的模式是多行模式。收集完这些之后,剩下的线条更加简单。


如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。


RegEx电路

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

enter image description here