使用正则表达式提取一个字符串,在其他字符串和 whitespace 之间包含一个 space

Using regex to extract a string including a space between other strings and whitespace

我的无线控制器有以下输出以及下面的正则表达式语句。我正在尝试使用名为捕获组的正则表达式解析出各种值。 'Global/whatever Lab/Lab01' 值中的 space 将丢弃该值之后的所有内容。有没有办法在组后替换 \S+ 以捕获 'Global/whatever Lab/Lab01' 的整个值?谢谢。

Number of APs: 2\nAP Name                            Slots    AP Model  Ethernet MAC    Radio MAC       Location                          Country     IP Address                                 State         \nAPAC4A.56BE.18A0                     2      9120AXI   ac4a.56be.18a0  045f.b91a.0a40  Global/whatever Lab/Lab01  US          2.2.2.2                                Registered    \nAPHAV-LAB-TEST-01                    2      9120AXI   ac4a.56be.8cd4  045f.b91d.4ce0  default location                  US          1.1.1.1                               Registered
(?P<ap_name>\S+)\s+(?P<slots>\d+)\s+(?P<model_number>\S+)\s+(?P<ether_mac>\S+)\s+(?P<radio_mac>\S+)\s+(?P<location>\S+)\s(?P<country>\S+)\s+(?P<ip_address>\S+)?\s+(?P<state>\S+)

也许可以尝试做一些类似于将 \S+ 替换为 [\S ]+ 的事情 我不知道是否有类似转义码的东西可以用来表示 []

之间的 space

当您需要匹配 multi-word 字段值时,请确保您可以描述其旁边字段的格式。了解规则后,您可以仅使用 .*? 模式匹配“未知”字段。

查看示例解决方案:

(?P<ap_name>\S+)\s+(?P<slots>\d+)\s+(?P<model_number>\S+)\s+(?P<ether_mac>\S+)\s+(?P<radio_mac>\S+)\s+(?P<location>.*?)\s+(?P<country>[A-Z]{2,})(?:\s+(?P<ip_address>\d{1,3}(?:\.\d{1,3}){3}))?\s+(?P<state>\S+)

参见regex demo

现在,location 组模式是 (?P<location>.*?),它匹配任何字符,出现 0 次或多次,但次数尽可能少,换行字符除外,这里是可能的,因为下一个组模式 country 组现在是 (?P<country>[A-Z]{2,}) 并且匹配两个或多个大写 ASCII 字母的任何子字符串。

请注意,我还“拼写”了 ip_address 组模式,并使带有初始空格的整个部分成为可选的,(?:\s+(?P<ip_address>\d{1,3}(?:\.\d{1,3}){3}))?.