Поиск информации из текста в python, проблема с регулярным выражением - PullRequest
0 голосов
/ 04 мая 2020

У меня есть один простой текстовый файл, в котором у меня есть несколько деталей, таких как

blah blah Manager blah blah: xxa
blah blah emp_id  blah balh: 1234
xx platform : xxab
xx
xx
xx
xx
xx
xx
xx

и т. Д. Около 1000 строк.

Так что я читаю строки с помощью f.readlines () и с помощью для l oop я могу проверить, существует ли строка в строке, тогда я хочу, чтобы эта конкретная строка была назначена в переменной.

f = open('temp.txt','r')
f = f.readlines()
for line in f:
    if ('employee') in line:
        emp_id = line
        print(manager)
    elif('manager') in line:
        manager = line
        print(emp_id)

, поэтому вывод, который я должен получить, - это одна строка, где существует строка сотрудника и менеджера но, скорее всего, я печатаю все строки

f = open('temp.txt','r')
    f = f.readlines()
    for line in f:
        if ('employee') in line:
            emp_id = line
            print(manager)
            break
        elif('manager') in line:
            manager = line
            print(emp_id)

он все еще дает мне ту же строку emp_id в переменной менеджера.

это работает и l oop keep идет, когда я пытаюсь print(emp_id), и он напечатает все строки после этого совпадения. В случае, если я делаю разрыв после одного l oop и запускаю другое, если еще условие даже тогда, он напечатает старую строку, а не новую совпавшую строку.

Так что теперь единственная путаница заключается в том, как Могу ли я сделать сингл для l oop и могу обработать все эти строки сразу, и если 'строка xx' совпадает в строке, то назначить эту строку в конкретной переменной.

Я могу сделать несколько для циклов но это не будет правильным способом, я думаю, и это также увеличит время.

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

manager : 
emp_id :
platform : 

Так что я тоже попробовал это с регулярным выражением, но получаю несколько экземпляров даже когда я использую ленивый оператор.

import re
f = open('temp.txt','r')
f = f.readlines()
for line in f:
   if re.match("(?=.*?termed)(?=.*?employee)", line, re.IGNORECASE):
       emp_id = line
       emp_id = re.findall(r"[A-Z]+[0-9]+", emp_id,  re.IGNORECASE)[-1]
       print(emp_id)
   elif re.match("(?=.*?manager)", line, re.IGNORECASE):
        manager = line
        print(manager)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...