Так что я пытаюсь сделать, это функция, которая находит последовательность «ATG» в строке, а затем оттуда перемещается вдоль строки в единицах 3, пока не найдет «TAA», «TAG» »или 'TGA' (ATG-ххх-ххх-ТАА | TAG | TGA)Regex Python findall. Делать вещи непреднамеренными
Чтобы сделать это, я написал эту строку кода (где fdna
является входная последовательность)
ORF_sequences = re.findall(r'ATG(?:...)*?(?:TAA|TAG|TGA)',fdna)
Я тогда хотел добавить 3 требования:
- Общая длина должна быть 30
- Два места перед ATG должен быть либо А или G для обнаружения (A | GxxATGxxx)
- Следующее место после ATG бы быть G (ATGGxx)
Для выполнить эту часть, я изменил мой код:
ORF_sequence_finder = re.findall(r'[AG]..ATGG..(?:...){7,}?(?:TAA|TAG|TGA)',fdna)
то, что я хочу, вместо того, чтобы все эти ограничения будет иметь требование 1 (больше или равно 30 символов), а затем ЯВНО требование 2 (A | GxxATGxxx) ИЛИ требование 3 (ATGGxx) ИЛИ оба из них.
Если я разделяю приведенную выше строку на две части и прилагаю их к списку, они выходят из строя и имеют повторы.
Вот несколько примеров различных случаев:
sequence1 = 'AGCCATGTGGGGGGGGGGGGGGGGGGGGGGGGGGGGGTGAAAA'
sequence2 = 'ATCCATGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGTAG'
sequence3 = 'AGCCATGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGTAG'
sequence4 = 'ATGGGGTGA'
sequence1 = 'A**G**CC*ATG*TGGGGGGGGGGGGGGGGGGGGGGGGGGGGG*TGA*AAA'
sequence1
будут приняты в соответствии с критериями, поскольку она вытекает требование 2 (A | GxxATGxxx), а его длина> = 30.
sequence2 = 'ATCC*ATG***G**GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG*TAG*
sequence2
будет acce pted, потому что следует требование 3 (A-T-G-G-х-х), а его длина> = 30
sequence3 = 'A**G**CC*ATG***G**GGGGGGGGGGGGGGGGGGGGGGGGGGGGG*TGA*AAA'
sequence3
будет принят, поскольку он выполняет как требование 2 и 3, в то же время имеющую> = 30 символа.
sequence4 = 'ATGGGGTGA'
sequence4
НЕ будет принят, потому что его не> = 30, не соответствует требованиям 2 или требование 3.
Так в основном, я хочу, чтобы принять последовательности, либо следуют требования 2 И/ИЛИ требование 3 (или оба) при удовлетворении требования 1.
Как я могу разделить это, не добавляя дубликатов (в случаях, когда они происходят) и выходят из строя?
Я думаю, что вы ищете perl. На любом нормальном языке вы действительно не захотите делать это с помощью регулярного выражения. – Voo
Должен ли '[AG] ..' подсчитываться по длине или только строка, начинающаяся с 'ATG', должна быть'> = 30'? – Qtax
только ATG. , , TGA | TAA | TAG должен быть включен в 30. то, что я делал раньше, состояло в том, что последовательность включала [AG ..], а затем использовала цикл for позже для последовательности [3:], чтобы обрезать первые несколько, но я не смог бы сделать это с теми, которые включали только [ATGG-xxx] –