Python 一行中的re.finditer(R或K,但不是RP或KP)
我想在子字符串中有Python 一行中的re.finditer(R或K,但不是RP或KP),python,regex,string,python-2.7,Python,Regex,String,Python 2.7,我想在子字符串中有p或K的索引,但不是PR或PK。现在我可以做两行代码,但比使用for循环if要慢。我想要一个带re.finditer的非常快的,可以吗 proseq = "NSDSECPLSHDGYCLHDGVCMYIEALDKYACNCVVGYIGERCQYRDLKWWELRP" xxx = [m.start() for m in re.finditer('(R|K)', proseq)] yyy = [m.start() for m in re.finditer('(RP|KP)', pr
p
或K
的索引,但不是PR
或PK
。现在我可以做两行代码,但比使用for
循环if
要慢。我想要一个带re.finditer
的非常快的,可以吗
proseq = "NSDSECPLSHDGYCLHDGVCMYIEALDKYACNCVVGYIGERCQYRDLKWWELRP"
xxx = [m.start() for m in re.finditer('(R|K)', proseq)]
yyy = [m.start() for m in re.finditer('(RP|KP)', proseq)]
print list(set(xxx)^set(yyy))
OUT> [40, 27, 44, 47]
比我的更快的for
循环(并且已排序)
其他快速方法也很受欢迎。使用正则表达式(R | K)([^p]|$)
。这可以自由读取为“R或K,后跟一个非P的字符([^P]
),或字符串的结尾($
)”
这个正则表达式实际上会给出结果,而不需要再次检查。使用正则表达式(R | K)([^p]|$)
。这可以自由读取为“R或K,后跟一个非P的字符([^P]
),或字符串的结尾($
)”
这个正则表达式实际上会在不需要再次检查的情况下给出结果。使用p(?[RK])|(?regexUsep(?[RK])|(?regex
proseq = "NSDSECPLSHDGYCLHDGVCMYIEALDKYACNCVVGYIGERCQYRDLKWWELPR"
cut_sites=[]
for i in range(0,len(proseq)):
if proseq[i]=='K' and proseq[i+1]!='P':
cut_sites.append(i)
elif proseq[i]=='R' and proseq[i+1]!='P':
cut_sites.append(i)
OUT> [27, 40, 44, 47]