Python Regex: найти совпадения по чуть-чуть похожим текстам и вернуть словарь (или список словарей) - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь найти совпадения в нескольких документах и ​​вернуть их в виде словаря (или списка словарей). Документы в двух форматах:

У некоторых есть две категории с одним элементом:

"Kategóriák:Faj1 (alfaj:12345.1)
Pseuda_kategóriák:Faj2 (alfaj:678910.11)"

А у других есть две категории и больше элементов:

"kategóriák:Faj3 (alfaj:121314.15)Pseuda_kategóriák:Faj4 (alfaj:161718.19)Faj5 (alfaj:20212223.24)"

Я напишу справа выражение, которое найдет все элементы 'faj', 'alfaj'. Вот код, который я пробовал до сих пор, но он не работает:

def find_elements(text):
    elements = {'nev':None,
                'alnev':None, 
                }
    p = re.compile(r'((Kategoriak)(:)(.*?)(w+\W))')
    m = re.search(m, text)
    elements['nev'] = m.group(2)
    elements['alnev'] = m.group(4)
  return elements

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

1 Ответ

0 голосов
/ 24 января 2019

Если вам нужны числа, следующие за «faj» и «alfaj», и вы хотите, чтобы все значения в строке возвращались, то re.findall находит все элементы в строке, которые соответствуют выражению регулярного выражения первой группы.

import re

s1 = "Kategóriák:Faj1 (alfaj:12345.1) Pseuda_kategóriák:Faj2 (alfaj:678910.11)"
s2 = "kategóriák:Faj3 (alfaj:121314.15)Pseuda_kategóriák:Faj4 (alfaj:161718.19)Faj5 (alfaj:20212223.24)"

def find_elements(s):
    elements = {'nev':None,
                'alnev':None}
    elements['alnev'] =  re.findall("alfaj:([\d\.]+)",s)
    elements['nev'] = re.findall("Faj(\d)",s)
    return(elements)

Вывод:

In [18]: [find_elements(s) for s in  [s1,s2]]
Out[18]:
[{'alnev': ['12345.1', '678910.11'], 'nev': ['1', '2']},
 {'alnev': ['121314.15', '161718.19', '20212223.24'], 'nev': ['3', '4', '5']}]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...