Я пытаюсь проанализировать выходные данные, в которых записи выровнены с помощью переменных пробелов. Вот рассматриваемый результат:
VLAN Table
VLAN VLAN Name Type Secure eth0 eth1 eth2 eth3 eth4
---- --------- ---- ------ ---- ---- ---- ---- ----
100 Port_1 Bridged Disable T U
200 Port_2 Bridged Disable T U
300 Port_3 Bridged Disable T U
400 Port_4 Bridged Disable T U
1249 AP_Mgmt Bridged Disable T
В частности, столбцы eth{0-4}. Я хотел бы сопоставить либо T, U, либо один пробел \s для каждого столбца eth{n}. Таким образом, желаемый результат будет выглядеть примерно так:
[['100', 'Port_1', 'Bridged', 'T', 'U ', ' ', ' ', ''], ['200', 'Port_2', 'Bridged', 'T', ' ', 'U', ' ', ' '], ['300', 'Port_3', 'Bridged', 'T', ' ', ' ', 'U', ' '], ['400', 'Port_4', 'Bridged', 'T', ' ', ' ', ' ', 'U'], ['1249', 'AP_Mgmt', 'Bridged', 'T', ' ', ' ', ' ', ' ']]
Также стоит отметить, что я планирую выполнить некоторую постобработку, чтобы нормализовать эти данные в классы данных Python или базовые модели. Просто нужен правильный статус тегов, чтобы соответствовать правильным столбцам порта.
Я попробовал сделать столбцы eth{0-4} их собственными обязательными значениями TextFSM со следующим регулярным выражением: ([TU\s]) и попытался сопоставить это значение на каждом седьмом пробеле между столбцами eth, как показано в шаблоне здесь:
Value Required vid (\d+)
Value Required vlan_name (\S+)
Value Required type (\S+)
Value Required eth0 ([TU\s])
Value Required eth1 ([TU\s])
Value Required eth2 ([TU\s])
Value Required eth3 ([TU\s])
Value Required eth4 ([TU\s])
Start
^\s*${vid}\s+${vlan_name}\s+${type}\s+\S+\s+${eth0}\s+${eth1}\s{7,}${eth2}\s{7,}${eth3}\s{7,}${eth4} -> Record
Текущий результат:
[['400', 'Port_4', 'Bridged', 'T', ' ', ' ', ' ', 'U']]
Подробнее здесь: https://stackoverflow.com/questions/798 ... -due-to-va