При чтении строк, сопоставьте слово "/ ISFUNC" и извлеките символы из последних, пока они не совпадут с "/", и сохраните их в переменной.Ожидаемый o / p-> tm1032 int 231 (соответствующая строка найдена в строке 2)
char_list = re.findall(r'/ISFUNC.*/(.*)$', line)
if char_list:
chars = char_list[0]
Как только ISFUNC найден, прочитайте предыдущую предыдущую строку и извлеките данные из этой строки, запуститесформируйте последний символ, пока он не совпадет с «/», и сохраните его в переменной.Ожидаемый o / p -> $ SYSNAME.P1 (строка 1)
Идеальным подходом здесь является либо (а) итерация по индексам списка, а не по самим строкам (то есть for i in range(len(file.readlines()): ... file.readlines()[i]
) или(b) сохранить копию последней строки (скажем, поставить last_line = line
в конце вашего цикла for. Затем укажите последнюю строку для этого выражения:
data_list = re.findall(r'/([^/]*)$', last_line)
if data_list:
data = data_list[0]
Продолжайте читать строки вниз и найдите строку, начинающуюся с «CALLING», а последняя строка после «/» должна совпадать с o / p шага 2 ($ SYSNAME.P1). Просто захватитеданные после слова CALLING и сохраните их. ожидаемый o / p -> KK01 (строка 90)
Предполагая, что из вашего примера вы имеете в виду "только данные сразу после (т.е. вплоть до знака равенства):
calling_list = re.findall(r'CALLING(.*)=.*/' + re.escape(data) + '$', line)
if calling_list:
calling = calling_list[0]
Вы можете переместить скобки, чтобы изменить то, что именно из этой строки вы хотите захватить. re.findall()
выведет список совпадений, включая только биты внутрикруглые скобки, которые были сопоставлены.