Mi è stato assegnato un problema per trovare i geni quando si assegnava una stringa delle lettere A, C, G o T tutto in una riga, come ATGCTCTCTTGATTTTTTTATGTGTAGCCATGCACACACACACATAAGA. Un gene viene avviato con ATG e termina con TAA, TAG o TGA (il gene esclude entrambi gli endpoint). Il gene consiste di terzine di lettere, quindi la sua lunghezza è un multiplo di tre e nessuna di queste terzine può essere la tripletta di inizio/fine sopra elencata. Quindi, per la stringa sopra i geni in esso ci sono CTCTCT e CACACACACACA. E in effetti la mia regex funziona per quella stringa particolare. Ecco quello che ho finora (e sono abbastanza felice con me stesso che ho ottenuto fino a questo punto):Java Regex per il genoma puzzle
(?<=ATG)(([ACGT]{3}(?<!ATG))+?)(?=TAG|TAA|TGA)
Tuttavia, se v'è un ATG e fine tripletta all'interno di un altro risultato, e non allineato con le triplette di quel risultato, fallisce. Per esempio:
Results for TCGAATGTTGCTTATTGTTTTGAATGGGGTAGGATGACCTGCTAATTGGGGGGGGGG :
TTGCTTATTGTTTTGAATGGGGTAGGA
ACCTGC
Si dovrebbe trovare anche una GGG, ma non lo fa: TTGCTTATTGTTTTGA (ATG | GGG | TAG) GA
Sono nuovo di regex in generale, e un po 'bloccato ... basta un piccolo suggerimento sarebbe fantastico!
Che cosa dovrebbe capita di "ATGATGTAG"? Partita o nessuna partita? –
+1 - Non ho tempo per pensarci adesso, e non so se questo è un uso appropriato della regex, ma mi piace il fatto che tu lo stia applicando a un problema interessante in biologia. Bella roba. – duffymo
'ATGATGTAG' non corrisponde perché ATG non può essere una delle terzine incluse. – Swordbeard