我有以下正则表达式可以提取运行良好的键值对。我已经通过另一个系统从多台机器接收了这些数据,我更愿意使用我已经拥有的数据而不是使用 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
最佳答案
如果您可以使用 \G
anchor 获取重复匹配以获取例如 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
关于正则表达式使用现有数据从 ipconfig 中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58829641/