【问题标题】:searching for sequences in a FASTA format以 FASTA 格式搜索序列
【发布时间】:2017-01-02 23:18:57
【问题描述】:

我正在尝试在 FASTA 格式的 DNA 序列中查找多个特定序列,然后将它们打印出来。为简单起见,我制作了一个简短的字符串序列来显示我的问题。

import re
seq = "QPPLSK"
find_in_seq = re.search(r"[^P](P|K|R|H|W)", seq)
print find_in_seq.string[find_in_seq.start():find_in_seq.end()]

当有 2 个匹配“QP”和“SK”时,我只得到一个匹配“QP”的输出。我如何才能显示 2 场比赛而不是只显示第一场比赛?

谢谢

【问题讨论】:

    标签: python regex biopython fasta


    【解决方案1】:

    使用 re.findall 并更改正则表达式,以便不再有捕获组 - [^P](?:P|K|R|H|W)[^P][PKRHW]

    import re
    seq = "QPPLSK"
    find_in_seq = re.findall(r"[^P][PKRHW]", str(seq))
    print(find_in_seq)
    

    Python demo

    注意,如果你想匹配除P之外的任何字母,你最好使用[A-OQ-Z]

    【讨论】:

    • 谢谢,但是在 FASTA 格式上尝试相同的方法时,该方法不起作用
    • 如果seq 是一个字符串,它将起作用。尝试传递 str(seq) 作为输入。
    • 是的,我有类似的东西 [('A', 'S', 'T', 'Q'), ('F', 'W', 'J', 'M' ) 代替序列显示。第一个匹配的序列甚至没有显示。即使我使用 str 将其解析为字符串,我也不认为它是字符串。如果它不是一个字符串,那么 re.search 也不会工作。
    • 我觉得自己像个笨蛋,我以为我已经更改了正则表达式,但我从来没有。非常感谢您的帮助。
    猜你喜欢
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多