我有一个字符串:
Station Disconnect:1.3.6.1.4.1.11.2.14.11.15.2.75.3.2.0.8 StaMAC:00:9F:0B:00:38:B8 BSSID:00 9F Radioid:2
我想拆分这个字符串。它看起来像这样 -
'Station Disconnect:1.3.6.1.4.1.11.2.14.11.15.2.75.3.2.0.8' 'StaMAC:00:9F:0B:00:38:B8' 'BSSID:00 9F' 'Radioid:2'
我尝试了这个逻辑 - msgRegex = re.compile(' [\ w \ s] +:')和分割功能。 我该怎么办请帮助我谢谢
答案 0 :(得分:1)
在这种特殊情况下,您可以像这样实现它:
['Station Disconnect:1.3.6.1.4.1.11.2.14.11.15.2.75.3.2.0.8', 'StaMAC:00:9F:0B:00:38:B8', 'BSSID:00 9F', 'Radioid:2']
输出:
(?<=[A-Z0-9])
正则表达式:
- A-Z或0-9
(?=[A-Z])
- 1个空格字符
$('#adding').submit(function(e) {
var formData = new FormData($(this));
e.preventDefault();
$.ajax({
type: "POST",
url: 'api.php?do=add',
data: formData ,
contentType: false,
processData: false,
cache: false,
success: function(data)
{
if (data === 'KO'){
document.getElementById("error").innerHTML = "Alert";
}
if (data === 'OK'){
document.getElementById("error").innerHTML = "OK";
}
}
});
- 正面展望A-Z
答案 1 :(得分:1)
从我看到的情况来看,如果匹配中有一个带有十六进制值的空格,则会出现问题。
因此,我相信你不能在这里使用分裂方法。将您的令牌与正则表达式匹配
(?<!\S)\b([^:]+):((?:[a-fA-F0-9]{2}(?:[ :][a-fA-F0-9]{2})*|\S)+)\b
请参阅regex demo
import re
rx = r"(?<!\S)\b([^:]+):((?:[a-fA-F0-9]{2}(?:[ :][a-fA-F0-9]{2})*|\S)+)\b"
ss = ["Station Disconnect:1.3.6.1.4.1.11.2.14.11.15.2.75.3.2.0.8 StaMAC:00:9F:0B:00:38:B8 BSSID:00 9F Radioid:2",
"Station Deassoc:1.3.6.1.4.1.11.2.14.11.15.2.75.3.2.0.5 StaMac1:40:83:DE:34:04:75 StaMac2:40:83:DE:34:04:75 UserName:4083de340475 StaMac3:40:83:DE:34:04:75 VLANId:1 Radioid:2 SSIDName:Devices SessionDuration:12 APID:CN58G6749V AP Name:1023-noida-racking-zopnow BSSID:BC:EA:FA:DC:A6:F1"]
for s in ss:
matches = re.findall(rx, s)
print(matches)
结果:
[('Station Disconnect', '1.3.6.1.4.1.11.2.14.11.15.2.75.3.2.0.8'), ('StaMAC', '00:9F:0B:00:38:B8'), ('BSSID', '00 9F'), ('Radioid', '2')]
[('Station Deassoc', '1.3.6.1.4.1.11.2.14.11.15.2.75.3.2.0.5'), ('StaMac1', '40:83:DE:34:04:75'), ('StaMac2', '40:83:DE:34:04:75'), ('UserName', '4083de340475'), ('StaMac3', '40:83:DE:34:04:75'), ('VLANId', '1'), ('Radioid', '2'), ('SSIDName', 'Devices'), ('SessionDuration', '12'), ('APID', 'CN58G6749V'), ('AP Name', '1023-noida-racking-zopnow'), ('BSSID', 'BC:EA:FA:DC:A6:F1')]
注意:如果结果中不需要元组,请从模式中删除捕获括号。
模式详情:
(?<!\S)\b
- 字符串或空格的开头,后跟字边界(下一个字母必须是字母/数字或_
)([^:]+)
- 捕获第1组:除:
以外的其他字符:
- 冒号((?:[a-fA-F0-9]{2}(?:[ :][a-fA-F0-9]{2})*|\S)+)
- 捕获第2组匹配的一个或多个匹配项:
[a-fA-F0-9]{2}(?:[ :][a-fA-F0-9]{2})*
- 2个十六进制字符后跟零个或多个空格或:
和2个十六进制字符|
- 或\S
- 非空白字符\b
- 尾随字边界。