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