[英]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
回答問題 #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]+
匹配任何字符 1+ 次,除了:
或字符串開頭的換行符)
關閉第 1 組:?[\r\n]+
匹配可選:
並匹配 1+ 換行符|
或者\G(?!^)
在上一場比賽結束時斷言 position,而不是在開始時)
關閉非捕獲組\r?\n[^:\r\n]+
匹配換行符,然后匹配除:
或換行符之外的任何字符 1+ 次:
匹配空格, :
和空格(
捕獲組 2
[^\r\n]+
匹配除換行符以外的任何字符 1+ 次(?:
非捕獲組
\r?\n
匹配換行符(?.:* : )
斷言下一行不包含:
[ \t]+[^\r\n]+
匹配 1+ 個空格或制表符以及 1+ 次除換行符以外的任何字符)*
關閉組並重復 0+ 次)
關閉第 2 組這有點復雜,但你可以簡化一下,
(?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的右上角面板上進行了解釋。 如果您願意,您還可以在此鏈接中觀看它如何與一些示例輸入匹配。
jex.im可視化正則表達式:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.