Мне была назначена проблема поиска генов при задании строки букв A, C, G или T в целом, например, ATGCTCTCTTGATTTTTTGGGGGTAGTATTACTACTACTAGTAGTAGTAGTATTTTTTGTGTAGCCATGCACACACACACATAAGA. Ген запускается с ATG и заканчивается либо TAA, TAG, либо TGA (ген исключает обе конечные точки). Ген состоит из триплетов букв, поэтому его длина кратна трем, и ни один из этих триплетов не может быть триплетами начала/конца, перечисленными выше. Итак, для строки выше генов в ней находятся CTCTCT и CACACACACACA. И на самом деле мое регулярное выражение работает для этой конкретной строки. Вот то, что я до сих пор (и я очень доволен собой, что я получил это далеко):Java Regex для головоломки генома
(?<=ATG)(([ACGT]{3}(?<!ATG))+?)(?=TAG|TAA|TGA)
Однако, если есть ATG и конечный триплет внутри другого результата и не выровнены с тройни этого результата он терпит неудачу. Например:
Results for TCGAATGTTGCTTATTGTTTTGAATGGGGTAGGATGACCTGCTAATTGGGGGGGGGG :
TTGCTTATTGTTTTGAATGGGGTAGGA
ACCTGC
Он должен найти также GGG, но не делает: TTGCTTATTGTTTTGA (ATG | GGG | TAG) GA
Я новичок в Regex в целом и немного застрял ... просто маленький намек был бы потрясающим!
Что должен случилось с «ATGATGTAG»? Совпадение или отсутствие матча? –
+1 - У меня нет времени подумать об этом прямо сейчас, и я не знаю, подходит ли это регулярное выражение, но мне нравится то, что вы применяете его к интересной проблеме в биологии. Хороший материал. – duffymo
«ATGATGTAG» не будет соответствовать, потому что ATG не может быть одним из включенных триплетов. – Swordbeard