Получить регулярное выражение из словаря — Python

#python #regex #dictionary

#python #регулярное выражение #словарь

Вопрос:

Я создал много простых регулярных выражений, и у меня есть текст для поиска по ним. Итак, по сути, я решил превратить их в словарь и вставить совпадения в качестве значений в другой словарь с соответствующими ключами:

 dic={"left":re.compile("[Лл]ев"),"right":re.compile("[Пп]рав")}
def counter(reg, text):
    cntr = 0
    for line in text:
        cntr  = len(re.findall(reg, line))
    return cntr

def regdict(dicc, source):
    k = {}
    for key in dicc:
        k[key]=counter(dicc[key], source)
    return k
regdict(dic,text)
 

результатом является либо правильное количество одного регулярного выражения с 0 для другого, либо a {'right': 0, 'left': 0} , и оно меняется при каждом запуске. Я не понимаю, что не так, первая функция работает нормально.

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

1. что такое текст regdict(dic,text) ? это файл, открытый в режиме чтения, или это список?

2. используйте print() , чтобы увидеть, какие значения у вас есть в функциях. Это помогает найти проблему.

3. как предлагает @miah — если вы используете одну строку, as text then for line in text: присвоит один символ line . BTW. Я обнаружил эту проблему, потому что раньше print() отображал значения в переменных.

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

5. @furas @miah текст представляет собой многострочный UTF-8 text = open('listbycolumn.txt', 'r', encoding='utf-8') . Распечатки, которые я удалил для публичного собрания, показывают, что он накапливает совпадения только для одного из ключей