#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
thenfor line in text:
присвоит один символline
. BTW. Я обнаружил эту проблему, потому что раньшеprint()
отображал значения в переменных.4. Я на самом деле думаю, что если это итератор файлового объекта, то, если он не будет сброшен между циклами, при второй попытке его прочитать он все равно будет в конце.
5. @furas @miah текст представляет собой многострочный UTF-8
text = open('listbycolumn.txt', 'r', encoding='utf-8')
. Распечатки, которые я удалил для публичного собрания, показывают, что он накапливает совпадения только для одного из ключей