我有以下正则表达式提取了效果很好的键值对。我已经从另一台计算机上通过另一个系统接收了此数据,我希望使用已经拥有的数据,而不是使用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
答案 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组答案 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*(.*)$|^([^:]+):$|^(.*)$
我不确定其他样本的外观。
编写此类表达式的关键是交替。我们将首先选择最复杂的模式,然后继续使用简单的模式(类似于FizzBuzz)。
在这里,我们最复杂的模式是多行模式。收集完这些之后,剩下的线条更加简单。
如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。
jex.im可视化正则表达式: