Используйте библиотеку re
. Используйте здесь параметр flags=re.I
, если регистр не учитывается.
import re
acronyms=[' MRI', 'fMRI', 'PPE', 'FFE']
text="""pull porous experiment
public protection expertise
personal protective
equipment
here is a magnetic resonance interglobular section
with a certain energy measure is on a table"""
matched={}
for a in acronyms:
pattern=''
for letter in a.strip():
pattern+='[ ]*{}[^ \n]+[ \n]+'.format(letter)
pattern+=''
print(a.strip(),pattern)
matched.update({a.strip():re.findall(pattern,text,flags=re.I)})
print(matched)
совпало, теперь должно содержать словарь с каждой аббревиатурой и список совпадений для каждого.
Вывод matched
теперь (обратите внимание, что аббревиатуры были удалены из начальных и конечных пробелов)
{'MRI': [' magnetic resonance interglobular '], 'fMRI': [], 'PPE': ['pull porous experiment\n ', 'public protection expertise\n', 'personal protective \nequipment\n'], 'FFE': []}
Это позволяет результатам занимать несколько строк, но эти символы конца строки (\n
) включаются в результаты сопоставления. Если вы предпочитаете, чтобы они были пробелами, вы можете использовать, например, re.sub
для замены [\n ]+
на
.
Вот ссылка на библиотеку re
: https://docs.python.org/3/library/re.html. Вот одно из многих потенциально полезных обобщенных c объяснений регулярных выражений: https://docs.python.org/3/howto/regex.html#regex -howto .