Регулярное выражение для возврата одной строки при сопоставлении шаблона для определенного текстового файла

#python-3.x #regex #regex-group #re

#python-3.x #регулярное выражение #регулярное выражение-группа #python-re

Вопрос:

У меня есть несколько текстовых файлов, и я хотел извлечь строку при совпадении определенного шаблона и добавить ее во фрейм данных с именем файла и строкой. В моем случае в этих текстовых файлах присутствует несколько одинаковых шаблонов.

 sample.txt:
"government high school
Govt high school physics department
Employee Designation School Assistant"

What I am getting:
    file         |             Org                      |              Org2 
sample.txt           government high school                   Govt high school physics department
sample.txt           government high school                   Employee Designation School Assistant

What I am looking for:
    file         |             Org                      |              Org2 
sample.txt           government high school                   Govt high school physics department
  

Вот код, который я использую :

 prs_path = "C://Users//subhr//scope_txt//"

df3 = [] 
for file in os.listdir(prs_path):
    Name = None
    with open(prs_path   file) as fd:
        for line in fd:
            line = line.lower()
            match = re.search('r(^.*government.*$)', line, re.I)
            Org = ""
            if match:
                Org = match.group()
                df3.append([file, Org])
            Org2 = ""
            Org3 = ""
            Org = ""
            if match is None:
                match2 = re.search('r(^.*school.*$)|(^.*college.*$)', line,re.I)
                if match2:
                    Org2 = match2.group()
                    df3.append([file, Org, Org2])
                if match2 is None:
                    match3 = re.search('r(^.*power.*$)', line, re.I)
                    if match3:
                        Org3 = match3.group()
                        df3.append([file, Org, Org2, Org3])
                    if match3 is None:
                        continue
  

Где я ошибаюсь?

Ответ №1:

Попробуйте использовать этот случай r"^(.*?):$n"(.*?) (.*?)$n(.*?) (.*? .*?) (.*?)$"

Ваш ввод будет разделен на 6 групп, проверьте это для тестирования.

https://regex101.com/r/UN9cjZ/1

Комментарии:

1. Спасибо за ответ, но это был всего лишь пример. В моих реальных текстовых файлах есть разные строки разной длины: (