python len函数问题

2024-10-04 11:25:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我是个彻头彻尾的Python,所以请原谅我的简单问题。我正在尝试编写一个脚本,它将在一个巨大的字符串中找到匹配ATxxxCA、atxxcca、ATxxxxxCA或ATxxxxxCA的所有序列,其中x可以是任何字符。当ATxxxCA模式匹配时,我希望脚本随后捕获匹配的ATxxxCA周围的前10个和后10个字符。例如,结果可能如下所示:aaaaaaaaaa atxxxcabbbbbbbbbbbbbb

我试着这样开始脚本:

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循环好像做错了什么?有人能帮忙吗?提前谢谢!在


Tags: 字符串脚本inputif序列字符printsequence
3条回答

注意重叠:

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

结果

^{pr2}$

下面是一个例子:

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]

I seem to be doing something wrong in my if loop?

Python不知道“is”的含义(在这里)。在

从你的if检查中去掉“is”

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

你还说:

When the ATxxxCA pattern is matched, I would then like the script to then capture the previous 10 and next 10 characters surrounding the matched ATxxxCA. For example, the result might look like this: aaaaaaaaaaATxxxCAbbbbbbbbbb

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

^{pr2}$

你会得到你的10个A结果,然后是AT和CA之间的东西,然后是你的10个B。在

或者你可以通过使用一组对整个事件进行重新设计来获取所有的信息

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

Regexpal是创建/调试regex的天赐之物。在

相关问题 更多 >