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

Python 如何找到跨越垂直线的图案?,python,string,Python,String,有没有办法在下面的输入中找到上面的模式?它是一种垂直模式,跨越多行文本 5'TCAGATGTATAGAGAGAGAGATCGATTCAGTCAGTTGAAGAGGTGNTACAGA :: ::: :: : : : ||||| : 3'ATTCAGCCTGCACTCGTACGAGCATGACAGAGAATTGTAGGAGGCTAGGTAGGTAGGTAGGTAGGTAGGTAGG 我尝试了多种方法,但我不确定这是否可能。这不起作用:

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

5'TCAGATGTATAGAGAGAGAGATCGATTCAGTCAGTTGAAGAGGTGNTACAGA
::     :::       ::        : :     : ||||| :          
3'ATTCAGCCTGCACTCGTACGAGCATGACAGAGAATTGTAGGAGGCTAGGTAGGTAGGTAGGTAGGTAGGTAGG
我尝试了多种方法,但我不确定这是否可能。这不起作用:

N
|
T

另外,如果
T
可以是
A
T
C
,或
G

试试这个:

if 'N\n|\nT' in input:
    print('found')
将字符串(我猜是DNA序列和碱基配对模式)拆分为3个字符串的列表,并使用索引沿所有3个字符串进行迭代:

line = "5' TCAGATGTGTATAAGAGACAGTGCGTATTCTCAGTCAGTTGAAGTGNTACAGAA\n            ::     :::       ::        : :     : ||||| :          \n3'          ATTCAGCCTGCACTCGTTACCGAGGCATGACAGAGAATATGTGTAGAGGCGAGCTAAGGTACTTGAAAGGGTGTATTAGAG"

new = line.split('\n')

pos_N = new[0].find('N')

N = 'N'
l = '|'
T = 'T'

for i in range(len(new[0])):
    if (new[0][i] == N):
        if l in new[1][i]:
            if T in new[2][i]:
                print('found')
为了确定模式是否发生在第一条链的最后10个核苷酸内,在相应的范围内迭代:

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

你的意思是,数据在打印时看起来像你在第一个列表中发布的一样?是的,它是dict中的一个键的值。我不认为你认为你想要的模式是你想要的(在
N
|
字符之后没有任何换行符,因为它们是行的中间,但它传达了想法。此文本是确切的字符串还是子字符串(可能是多行字符串/文件的)?这是我想在数百个字典键中搜索的模式-
N
是一致的,但是
下面的字符可以是
ATCG
@ggorlen中的任何字符。此模式的结构如下-这是一个字典键的值。欢迎这样做!这假设
pos\N
将匹配管道和它下面的
T
,但它可能不匹配。可能第一个
N
与管道不匹配,而
T
但行组中后面的一个匹配,在这种情况下,这种方法会给出一个假阴性。您确实需要检查第一行中的每个
N
。尝试向asnwer添加原因,以确定是否匹配为什么选择这个以及它如何解决OP问题亲爱的帖木儿-我如何扩展它来检查“|”是否在上字符串的最后10个字符下面?意思是要知道上字符串的最后10个字符是否绑定到另一个字符串-如果您能给我一些帮助,那就太好了-谢谢。@Apex更新了答案。非常感谢:)
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