2

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

Вот пример:

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

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

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

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

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

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

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

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

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

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

1 ответ1

1

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

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

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

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

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

Проверено на regex101.com

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .