使用正则表达式提取一个字符串,在其他字符串和 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}))?
.
我的无线控制器有以下输出以及下面的正则表达式语句。我正在尝试使用名为捕获组的正则表达式解析出各种值。 '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 ]+
的事情
我不知道是否有类似转义码的东西可以用来表示 []
当您需要匹配 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}))?
.