Encontrar la forma completa del acrónimo entre paréntesis usando expresiones regulares

Encontrar la forma completa del acrónimo entre paréntesis usando expresiones regulares

Estoy tratando de encontrar acrónimos completos que se han especificado en un texto entre paréntesis.

Aquí hay un ejemplo:

Se ha informado que la metilación aberrante del ADN, una de las principales alteraciones epigenéticas en el cáncer, se acumula en un subconjunto de cáncer colorrectal (CCR), el llamado fenotipo metilador de isla CpG (CIMP), que se sabe que se correlaciona con la inestabilidad reducida de los microsatélites ( MSI)-CRC alto

Aquí, quiero poder formar una lista de ocurrencias de formato corto/completo como:

CCR - Cáncer colorrectal

CIMP - Fenotipo metilador de isla CpG

MSI - microsatélite con inestabilidad reducida

La cuestión es que he podido encontrar todas las entidades entre paréntesis usando re.findall('(\(.*?\))', s), pero encontrar el formato completo correspondiente está resultando difícil.

Suponiendo que todos esos formularios completos están en el lado izquierdo del paréntesis, quiero usar lo siguiente2condiciones para capturar la forma completa de la abreviatura entre paréntesis.

  • el número de palabras no debe ser superior a 3+|SF| donde |SF| es el número de caracteres en la forma abreviada (inestabilidad reducida por microsatélite (MSI): aquí la forma completa tiene 4 palabras mientras que la forma abreviada tiene 3 caracteres)
  • La primera palabra de la forma completa comienza con el primer carácter de la forma corta (p. ej.Ccáncer olorrectal (CRC))

Con mi comprensión actual de regex, no he podido escribir un documento regexque resuelva las 2 condiciones anteriores y encuentre todos esos casos en el texto.

¿Podría darme algunos consejos para esto?

Respuesta1

Suponiendo que estás usando Python:

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

Este captura el primer carácter de una palabra en el grupo 2. Esta palabra va seguida de cero a tres palabras (aumente el número si es adecuado). Todas las palabras están delimitadas por un espacio literal. Lo siguiente es un corchete abierto seguido de la letra capturada en el grupo 2, que no distingue entre mayúsculas y minúsculas. A todo esto le sigue el resto del patrón de corchetes.

No he podido hacer coincidir el número de palabras con el número de caracteres del acrónimo, por lo que no se cumple una de tus condiciones.

Mis comentarios fueron demasiado pesimistas. Pero captará muchas tonterías.

Probado en regex101.com

Por cierto, puedes modificar el patrón de corchetes y usarlo \([^)]*\). Los personajes negados con multiplicador codicioso no necesitan referencia retrospectiva, por lo que el proceso funciona más rápido.

información relacionada