Извлечь диапазон слов предложения из диапазона символов в абзаце - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть набор слов, который

Birds are a group of endothermic vertebrates, characterised by feathers Birds are also known as Aves They have toothless beaked jaws They have a high metabolic rate Birds are also known as Aves

Что мне нужно сделать, это найти несколько вхождений слов «Птицы также известны как Авес».Поэтому я написал регулярное выражение, соответствующее индексу символов «Птицы, также известные как Авес» в этом параграфе.Здесь я получаю два совпадения:

Интервал здесь представляет диапазон символов.

   <_sre.SRE_Match object; span=(72, 100), match='Birds are also known as Aves'>
<_sre.SRE_Match object; span=(165, 193), match='Birds are also known as Aves'>

Но мне нужно знать диапазон слов вместо диапазона символов.Как и в диапазоне слов (10,16) в первом матче и (27,33) во втором.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

«Что мне нужно сделать, это найти вхождение» -> при условии, что есть только один случай:

s = ("Birds are a group of endothermic vertebrates, characterised by feathers "
    "Birds are also known as Aves They have toothless beaked jaws They have a high "
     "metabolic rate Birds are also known as Aves")
sub = "Birds are also known as Aves"
len_sub = len(sub.split())
len_left = len(s.split(sub)[0].split())
print(len_left, len_left+len_sub)
0 голосов
/ 14 декабря 2018

regex не поддерживают это, но вы можете вычислить это на лету так:

import re
s = 'Birds are a group of endothermic vertebrates, characterised by feathers Birds are also known as Aves They have toothless beaked jaws They have a high metabolic rate Birds are also known as Aves'

pat = 'Birds are also known as Aves'
pat_len = len(pat.split())
for x in re.finditer(pat, s):
    start = len(s[:x.start()].split())
    end = start + pat_len
    print(start, end)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...