Busco ayuda para resolver un problema relacionado con ADN y tal (aunque no hay que saber biología para lo que estoy preguntando aquí). Primero expondré la situación:
De un fichero en formato GenBank, tras haberlo parseado, extraje de él la siguiente información, almacenada en una variable como una sola cadena:
Using perl Syntax Highlighting
$seq_cds = "join(12345..12389,13400..13567,1500..1523)join(45085..46000,49
001..50678)complement(join(67548..67908,78960..79765))"
001..50678)complement(join(67548..67908,78960..79765))"
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
El anterior es un ejemplo que me he inventado, pero lo que se obtiene es de ese estilo.
A los números que hay entre paréntesis (11111..22222,33333..44444,55555..66666) etc. les pueden preceder las siguientes palabras:
Ejemplo 1:
50878..51332 (no tienen paréntesis tampoco)
Ejemplo 2:
join(23519..24451,24542..24655,24752..24962,25041..25435,
25524..25743,25825..25997,26081..26203,26292..26452,
26543..26776,26862..27012,27099..27281,27372..27533,
27618..27713,27803..28431,28708..28805,28890..29080,
29160..30065,30147..30311,30410..30816,30902..31079)
Ejemplo 3:
complement(57392..58978)
Ejemplo 4:
complement(join(64398..64475,64582..64656,64751..64807,
64901..65017,65110..65217,65331..65456,65563..65652,
65739..65864,66107..66160,66262..66342,66450..66557,
66678..66749,66835..66897,67324..67512))
Tras todo este rollo, lo que me gustaría saber es una manera de:
- agrupar todas las secuencias de números como el ejemplo 1 y ejemplo 2 en un array @join y
- agrupar todas las secuencias de números como el ejemplo 3 y ejemplo 4 en un array @complement.
@join = (11111,22222,33333,44444,55555)
Con el objetivo de extraer las bases de una cadena de ADN del siguiente modo: extraer todas las bases desde la posición 11111 hasta la posición 22222 e incluirlas en una variable, extraer todas las bases desde la posición 33333 hasta la posición 44444 y unirlas a la misma variable, etc. (esto último ya lo sé hacer -creo-, lo decía por si sabéis si el operador ".." que une las posiciones inicialmente me podría ayudar para algo en esta tarea, y así no sustituirlo por comas).
Por cierto, para que me queden los números separados por comas (,) utilizo antes una expresión regular para sustituir ".." por ",", ese no es un problema, lo que no sé es cómo conseguir @join y @complement.
He probado con expresiones regulares, pero no sé si se puede con ellas solamente. También probé con paréntesis de expresiones regulares, pero no conseguí nada.
Además, y si no es mucho pedir, agradecería mucho que fuera un código lo más sencillo posible. Es que soy bastante nuevo en programación, y es bastante importante que lo entienda para lo que quiero hacer.
Muchísimas gracias.