Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一行中的re.finditer(R或K,但不是RP或KP)_Python_Regex_String_Python 2.7 - Fatal编程技术网

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])|(?regexUse
p(?[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]