Поиск полной формы аббревиатуры в скобках с помощью регулярного выражения

Поиск полной формы аббревиатуры в скобках с помощью регулярного выражения

Я пытаюсь найти полные формы аббревиатур, которые были указаны в тексте с помощью скобок.

Вот пример:

Аберрантное метилирование ДНК, одно из основных эпигенетических изменений при раке, как сообщается, накапливается в подтипе колоректального рака (КРР), так называемом фенотипе метилатора CpG-островка (CIMP), который, как известно, коррелирует с микросателлитной сниженной нестабильностью (MSI) - высоким КРР.

Здесь я хочу иметь возможность сформировать список сокращенных/полных форм вхождений, например:

КРР - колоректальный рак

CIMP - фенотип метилирующего островка CpG

MSI - микроспутник снизил нестабильность

Дело в том, что мне удалось найти все заключенные в скобки сущности, используя re.findall('(\(.*?\))', s), но найти соответствующую полную форму оказалось сложно.

Предполагая, что все такие полные формы находятся слева от скобок, я хочу использовать следующее2условия для фиксации полной формы аббревиатуры в скобках-

  • количество слов не должно превышать 3+|SF|, где |SF| - количество символов в краткой форме (микроспутниковая пониженная нестабильность (MSI) - здесь полная форма имеет 4 слова, тогда как краткая форма имеет 3 символа)
  • Первое слово полной формы начинается с первой буквы краткой формы (например,сколоректальный рак (сrc))

С моим текущим пониманием regexя не смог написать уравнение, regexкоторое решает два вышеуказанных условия и находит все такие случаи в тексте.

Не могли бы вы дать мне несколько советов по этому поводу?

решение1

Предполагая, что вы используете Python:

((\w)\w* )(\w* ){0,3}\((?i)(\2)[^)]*\)

Этот захватывает первый символ слова в группе 2. За этим словом следует от нуля до трех слов (увеличьте число, если подходит). Все слова разделяются буквенным пробелом. Далее следует открывающая скобка, за которой следует буква, захваченная в группе 2, которая становится нечувствительной к регистру. За всем этим следует остальная часть шаблона скобок.

Мне не удалось сопоставить количество слов с количеством символов аббревиатуры, поэтому одно из ваших условий не выполнено.

Мои комментарии были слишком пессимистичны. Но это выловит много глупостей.

Протестировано на regex101.com

Кстати, вы можете подправить шаблон скобок и использовать \([^)]*\). Отрицательные символы с жадным множителем не нуждаются в обратной ссылке, поэтому процесс работает быстрее.

Связанный контент