Получить группу регулярных выражений с нечеткостью
У меня есть очень большой список слов (около 200k):
["cat", "the dog", "elephant", "the angry tiger"]
Я создал это регулярное выражение с нечеткостью:
regex = "(cat){e<3}|(the dog){e<3}|(elephant){e<3}|(the angry tiger){e<3}"
У меня есть входные предложения:
sentence1 = "The doog is running in the field"
sentence2 = "The elephent and the kat"
...
Вот что я хочу получить:
res1 = ["the dog"]
res2 = ["elephant", "cat"]
Я попробовал это, например:
re.findall(regex, sentence2, flags=re.IGNORECASE|re.UNICODE)
Но это выводит меня:
["elephent", "kat"]
Есть идеи, как получить правильный ответ с исправленными словами ? Что я хочу, так это получить группу захвата регулярных выражений для каждого матча, но я изо всех сил стараюсь сделать это.
Может быть, я этого не делаю. верно, и, возможно, способ регулярного выражения не самый хороший, но if item in list
с циклом for
слишком длинный для выполнения.
1 ответ:
Это можно сделать, вручную построив регулярное выражение и назвав группы:
import regex as re a = ["cat", "the dog", "elephant", "the angry tiger"] a_dict = { 'g%d' % (i):item for i,item in enumerate(a) } regex = "|".join([ r"\b(?<g%d>(%s){e<3})\b" % (i,item) for i,item in enumerate(a) ]) sentence1 = "The doog is running in the field" sentence2 = "The elephent and the kat" for match in re.finditer(regex, sentence2, flags=re.IGNORECASE|re.UNICODE): for key,value in match.groupdict().items(): if value is not None: print ("%s: %s" % (a_dict.get(key), value))
elephant: elephent cat: kat