Как сопоставить строку, присутствующую после символа, если ее значение не должно совпадать? - PullRequest
0 голосов
/ 26 февраля 2019

Предположим, у нас есть следующие 2 строки.

строка - 1: (полная строка)

char = "port : id 0xa30  State INIT-DOWN (Admin Down | Port Disabled/Link status unknown)  Rate 8100  MeasuredBw 18097"

строка - 2: (если часть строки отсутствует. Т.е. строка ' Rate 8100 MeasuredBw 18097' отсутствует)

char = "port : id 0xa30  State DOWN (Admin Down, Link Down, ODU Up, CCP Up)"

Итак, я могу проверить строку, если часть строки присутствует или нет.Но проблема в том, что когда строка присутствует, я не могу сопоставить строку.

Регулярное выражение, которое я придумал: (хотя и не самое лучшее)

re.search("port\s+:\s+id\s+(\w+)\s+State\s+(\w+-*\w*)[\(\w\)\|\/\s\,]*(?:Rate\s+(\w+)\s+MeasuredBw\s+(\w+))?", port_state1).groups()

Вывод:

('0xa30', 'DOWN', None, None) for both the string.

Ожидаемый результат:

String-1:  
('0xa30', 'DOWN', '8100', '18097')  
String-2:  
('0xa30', 'DOWN', None, None)

1 Ответ

0 голосов
/ 26 февраля 2019

Попробуйте приведенную ниже схему

Пример:

import re

char_1 = "port : id 0xa30 State INIT-DOWN (Admin Down | Port Disabled/Link status unknown) Rate 8100 MeasuredBw 18097"
char_2 = "port : id 0xa30 State DOWN (Admin Down, Link Down, ODU Up, CCP Up)"


print(re.search("port\s+:\s+id\s+(\w+)\s+State\s+(\w+-*\w*)\s+\(.*?\)\s*(?:Rate\s+(\d+)\s+MeasuredBw\s+(\d+))?", char_1).groups())
print(re.search("port\s+:\s+id\s+(\w+)\s+State\s+(\w+-*\w*)\s+\(.*?\)\s*(?:Rate\s+(\d+)\s+MeasuredBw\s+(\d+))?", char_2).groups())

Выход:

('0xa30', 'INIT-DOWN', '8100', '18097')
('0xa30', 'DOWN', None, None)
...