Искать узор в Python - PullRequest
       1

Искать узор в Python

1 голос
/ 11 июля 2020

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

Образец файла, который я использую:

Container:container_12345

asfacaasda:..........
sdaasdasda:............
dasdadaadada.....

jiasjafjsdf.............
sdfsdfsd..................

Container:container_23456

dasdafsadf....
dfsdfsaf.....
fsfsfsdf......

Я попытался извлечь значения, представленные после шаблона «Контейнер:» (т.е.) container_12345

Мой код:

List = []
pattern=re.compile("Container:")
fop=open(filename,"r")
for line in fop:
    for char in line:
        result=pattern.search(char)
        List.append(result.group(1))

print(List)

Мой результат:

List.append(result.group(1))
AttributeError: 'NoneType' object has no attribute 'group'

Выведите то, что я ожидаю:

['container_12345','container_23456']  #Present in that list

Пожалуйста, объясните мне, что я сделал не так. Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 11 июля 2020

Регулярные выражения - бесполезное осложнение, если вы ищете stati c строку.

for line in lines:
    if line.startswith("Container:"):
        print(line[len("Container:"):].strip())

Вызов strip() обрезает любые пробелы с начала или с конца; если вы его опустите, имейте в виду, что line заканчивается символом новой строки.

Фактическая ошибка в вашем коде заключается в том, что вы пытаетесь извлечь что-то, даже когда search возвращает None; Кроме того, ваше регулярное выражение кажется немного неправильным, и вы без нужды перебираете каждый символ в каждой строке, поэтому регулярное выражение никогда не будет совпадать.

1 голос
/ 11 июля 2020

Просто используйте выражение для всего содержимого вместо того, чтобы повторять его построчно. Модуль re имеет встроенную функциональность именно для его целей:

import re
rx = re.compile('^Container:\s*(.+)', re.M)
with open(your_file) as fp:
    containers = [m.group(1) for m in rx.finditer(fp.read())]
    print(containers)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...