2012-03-08 44 views
6

Đấu tranh với RE để tìm kiếm chuỗi 'TAA' của chuỗi (3 ký tự) 'TAA' một lần nữa.Biểu thức chính quy của Python với mã số

tôi thử như sau:

re.findall('TAA...+?TAA',seq) trong đó tất nhiên không cho ba nhưng không cho tôi trình tự

re.findall('TAA([ATGC]{3})+?TAA' , seq) tuy nhiên mang lại cho tôi một danh sách như đầu ra

'AGG', 'TCT', 'GTG', 'TGG', 'TGA', 'TAT', 

Bất kỳ ý tưởng? Như tôi dĩ nhiên có thể kiểm tra đầu ra từ

re.findall('TAA...+?TAA',seq)

nếu chiều dài% 3 == 0, nhưng làm thế nào để làm điều này với RE?

+0

là TAA TAA TAA chụp hợp lệ (TAA được ra khỏi cơ hội cũng là bộ ba giữa 3 nhân vật)? –

Trả lời

4

Bạn muốn nhóm không chụp.

(?:...)

Một phiên bản không chụp ngoặc thường xuyên. Phù hợp với bất kỳ cụm từ thông dụng nào bên trong dấu ngoặc đơn, nhưng chuỗi con phù hợp với nhóm không thể được truy lục sau khi thực hiện khớp hoặc được tham chiếu sau trong mẫu.

Hãy thử điều này:

re.findall('TAA(?:[ATGC]{3})+?TAA' , seq) 
+0

Xảy ra để có một ý tưởng kết hợp điều này với TGA TAA TAG như một cuộc gặp gỡ đầu tiên hoặc cuối cùng? – Jasper

+0

Giải pháp cho bản thân mình cho người khác sử dụng: re.findall ('(?: TAA | TAG | TGA) (?: [ATGC] {3}) +? (?: TAA | TAG | TGA)', seq) – Jasper

Các vấn đề liên quan