Существует только один способ узнать, сколько слов до (CFA) составляют так называемую полную форму: посмотрите количество альф в группе 2 (назначьте l
), разбейте группа 1 на пустом месте, возьмите последние l
слова, основанные на длине группы 2, и затем воссоединитесь.
Ваше регулярное выражение будет принимать (CFA.), но не (C. FA) поэтому небольшое изменение в вашем регулярном выражении для того, чтобы разрешить дополнительный период после каждой альфы, и кажется, что вы пытаетесь сказать, что сокращение должно состоять из двух или более буквенных символов - есть более простой способ express что.
Перейдите в группу 2 в регулярном выражении:
( # start of group 2
(?: # start of non-capturing group
[A-Z] # an alpha character
\.? # optionally followed by a period
) # end of non-capturing group
{2,} # the non-capturing group is repeated 2 or more times
) # end of group 2
Код:
#!/usr/bin/env python3
import re
x = 'Confirmatory factor analysis (CFA) is a special case of what is known as structural equation modelling (S.E.M.).'
results = []
split_regex = re.compile(r'\s+')
for m in re.finditer(r'\b([A-Za-z][a-z]*(?:\s[A-Za-z][a-z]*)+)\s+\(((?:[A-Z]\.?){2,})\)', x):
abbreviation = m[2]
l = sum(c.isalpha() for c in abbreviation)
full_form = ' '.join(split_regex.split(m[1])[-l:])
results.append([full_form, abbreviation])
print(results)
Печать
[['Confirmatory factor analysis', 'CFA'], ['structural equation modelling', 'S.E.M.']]
Python Демо