Из того, что я вижу, у вас есть проблема, когда у вас есть пробелы внутри спичек с шестнадцатеричные значения.
Из-за этого, я считаю, вы не можете использовать подход разделения. Сопоставьте лексемы с регулярным выражением, как
(?<!\S)\b([^:]+):((?:[a-fA-F0-9]{2}(?:[ :][a-fA-F0-9]{2})*|\S)+)\b
См regex demo
Python code:
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')]
ПРИМЕЧАНИЕ: Если вам не нужны никакие кортежи в результат, удалите захват скобки из шаблона.Подробнее
Pattern:
(?<!\S)\b
- начало строки или пробел следуют с границей слова (следующий символ должен быть буквой/цифрой или _
)
([^:]+)
- Захватив группа # 1: 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
- конечная граница слова.
Простой раскол с пространством. 'str.split ('')' –
Это не дает правильного вывода @VivekKumar – Prafulla
Я использовал функцию разделения и регулярное выражение также msgRegex = re.compile ('[\ w \ s] +:') @RedBassett – Prafulla