python - 如何找到跨越垂直线的图案?

标签 python string

N
|
T

有没有办法在下面的输入中找到上面的模式?它是一种跨越多行文本的垂直图案。

5' TCAGATGTGTATAAGAGACAGTGCGTATTCTCAGTCAGTTGAAGTGNTACAGAA
            ::     :::       ::        : :     : ||||| :          
3'          ATTCAGCCTGCACTCGTTACCGAGGCATGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG

我尝试了多种方法,但不确定是否可行。这不起作用:

if 'N\n|\nT' in input:
    print('found')

此外,如果 T 可以是任何字母 ATCG

最佳答案

将字符串(我猜是 DNA 序列和碱基配对模式)拆分为 3 个字符串的列表,并使用索引迭代所有 3 个字符串:

import re

in_str = '''
5' TCAGATGTGTATAAGAGACAGTGCGTATTCTCAGTCAGTTGAAGTGNTACAGAA
            ::     :::       ::        : :     : ||||| :          
3'          ATTCAGCCTGCACTCGTTACCGAGGCATGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG'''

in_str = re.sub(r'^\s*', "", in_str)
lst = re.split(r'\n', in_str)

acgt = set(['A', 'C', 'G', 'T'])
for idx in range(min([len(s) for s in lst])):
    if lst[0][idx] == 'N' and lst[1][idx] == '|' and lst[2][idx] in acgt:
        print('found!')
        break

要查找该模式是否出现在第一条链的最后 10 个核苷酸内,请在相应的范围内迭代:

len0 = len(lst[0])
offset = 10
for idx in range(len0 - offset, len0):
    if lst[0][idx] == 'N' and lst[1][idx] == '|' and lst[2][idx] in acgt:
        print('found!')
        break

关于python - 如何找到跨越垂直线的图案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67063335/

相关文章:

Objective-c 将 NSString 转换为 NSInteger

java - 返回始终为字母数字的字符串值

python - 如何将特殊格式的文本组织到列表中(在 python 上)

python - 需要帮助的一个简单的python错误

python - 将文本编码到文件/正确读取编码文本以消除 Â 符号?

string - 获取不带字符的字符串的所有子串的时间复杂度是多少?

javascript - js中值类型的语义副本

python - Django 根据模型更新文件上的 var

python - 如何均衡图像并将其绘制为带有 openCV 和 numpy 的直方图

c - 是的,C 中没有字符串