python len函数问题

时间:2011-04-15 22:03:16

标签: python regex

我是一个完整的Python菜鸟,所以请原谅我的简单问题。我正在尝试编写一个脚本,它将找到与ATxxxCA,ATxxxxCA,ATxxxxxCA或ATxxxxxxCA匹配的巨大字符串中的所有序列,其中x可以是任何字符。当ATxxxCA模式匹配时,我会希望脚本然后捕获匹配的ATxxxCA周围的前10个和后10个字符。例如,结果可能如下所示:aaaaaaaaaaATxxxCAbbbbbbbbbb

我试图像这样启动脚本:

SeqMatch = input("enter DNA sequence to search: ")
for s in re.findall(r'AT(.*?)CA', SeqMatch):
    if len(s) is < 10:
        print(s)
    else:
        print('no sequence matches')

我在if循环中似乎做错了什么?有人可以帮忙吗?提前谢谢!

3 个答案:

答案 0 :(得分:1)

  

我似乎在做错事   我的if循环?

Python不知道“是”的含义是什么(在此上下文中)。

从if check中删除“是”,

if len(s) < 10:
    print(s)
else:
    print('no sequence matches')

你也说过:

  

当ATxxxCA模式匹配时,我   然后会喜欢这个剧本   捕获前10个和下10个   匹配的周围的字符   ATxxxCA。例如,结果可能   看起来像这样:   aaaaaaaaaaATxxxCAbbbbbbbbbb

如果要捕获前面的/后面的(?)10个字符,请将正则表达式更改为

 (.{10})AT(.*)CA(.{10})

你将获得10个结果,然后是AT和CA之间的东西,然后是你的10bs。

或者你可以通过围绕整个事物使用一套画面来捕捉所有这些

 (.{10}AT.*CA.{10})

Regexpal是创建/调试正则表达式的天赐之物。

答案 1 :(得分:1)

注意重叠:

import re

adn = ('TCGCGCCCCCCCCCCATCAAGACATGGTTTTTTTTTTATTTATCAGATTACAGATACA'
       'GTTATGGGGGGGGGGATATACAGATGCATAGCGATTAGCCTAGCTA')


regx = re.compile('(.{10})(AT.{3,6}CA)(.{10})')
res = regx.findall(adn)
for u in res:
    print u

print

pat = re.compile('(.{10})(AT.{3,6}CA)')
li = []
for mat in pat.finditer(adn):
    x = mat.end()
    li.append(mat.groups()+(adn[x:x+10],))
for u in li:
    print u

结果

('CCCCCCCCCC', 'ATCAAGACA', 'TGGTTTTTTT')
('GGGGGGGGGG', 'ATATACA', 'GATGCATAGC')

('CCCCCCCCCC', 'ATCAAGACA', 'TGGTTTTTTT')
('TTTTTTTTTT', 'ATTTATCA', 'GATTACAGAT')
('GGGGGGGGGG', 'ATATACA', 'GATGCATAGC')

答案 2 :(得分:0)

以下是一个例子:

s = "a"*20 + "ATxxxxCA" + "b"*20
rec = re.compile(r'(AT.{3,6}CA)')
mo = rec.search(s)
print s[mo.start()-10:mo.end()+10]