在python中围绕字符拆分字符串

在python中围绕字符拆分字符串,python,string,list,loops,split,Python,String,List,Loops,Split,嘿,伙计们,我在这里看到了关于如何在指定字符处拆分字符串的答案,这非常简单。我需要知道的是如何在两个字符之间分割字符串 i、 e拆分以M开头、以Z结尾的字符串 RERTCRPVNMVRRTNSKSRSRHRZGRCRCGRHWVRNFDNPFISRRRSZTSFFIFTVKFLSSSYGLKKKKKIKRTVKVQGSTIMSLLNTZLN 进入 RERTCRPVN MVRNSRRTNSKSRHRZ GRCRCGRHWVRNFDNPFISRYRRSZTSFFIFTVKFLSSSYGLKKKIKR

嘿,伙计们,我在这里看到了关于如何在指定字符处拆分字符串的答案,这非常简单。我需要知道的是如何在两个字符之间分割字符串

i、 e拆分以M开头、以Z结尾的字符串 RERTCRPVNMVRRTNSKSRSRHRZGRCRCGRHWVRNFDNPFISRRRSZTSFFIFTVKFLSSSYGLKKKKKIKRTVKVQGSTIMSLLNTZLN

进入 RERTCRPVN MVRNSRRTNSKSRHRZ GRCRCGRHWVRNFDNPFISRYRRSZTSFFIFTVKFLSSSYGLKKKIKRTVKvQgsti MSLLNTZ 项次

后来只保留那些想要的

我可能会形成某种奇怪的循环来这样做

NET=Aminos.split('M')
LIST=[]
rock= int(0)
while LIST[rock]!= 'M' and LIST[rock]!= '':
    LIST.append('M' + NET[rock])
    rock=rock + 1
    other=other+1
print(LIST)
但是在这个例子中,我得到了索引超出范围的错误

这类事情似乎也相当乏味,因为我必须在每个Z之后用拆分将列表分开,并尝试将“Z”连接到每个Z的末尾


有人知道一种更有效的方法吗?

这听起来像是关于
re.split

i、 e:

可以使用从字符串中提取以M开头、以Z结尾的所有字符串:

>>> s = "RERTCRPVNMVRNSRRTNSKSRSRHRZGRCRCGRHWVRNFDNPFISRYRRSZTSFFIFTVKFLSSYGLKKRKIKRTTVKVQGSTIMSLLNTZLN"
>>> ex = re.compile("(M.*?Z)")
>>> re.split(s, ex)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/re.py", line 167, in split
    return _compile(pattern, flags).split(string, maxsplit)
TypeError: expected string or buffer
>>> re.split("M.*Z", s)
['RERTCRPVN', 'LN']
>>> re.findall('M.*?Z', "RERTCRPVNMVRNSRRTNSKSRSRHRZGRCRCGRHWVRNFDNPFISRYRRSZTSFFIFTVKFLSSYGLKKRKIKRTTVKVQGSTIMSLLNTZLN")
['MVRNSRRTNSKSRSRHRZ', 'MSLLNTZ']
或者,如果您希望将字符串也保留在两者之间:

>>> re.split('(M.*?Z)', "RERTCRPVNMVRNSRRTNSKSRSRHRZGRCRCGRHWVRNFDNPFISRYRRSZTSFFIFTVKFLSSYGLKKRKIKRTTVKVQGSTIMSLLNTZLN")
['RERTCRPVN', 'MVRNSRRTNSKSRSRHRZ', 'GRCRCGRHWVRNFDNPFISRYRRSZTSFFIFTVKFLSSYGLKKRKIKRTTVKVQGSTI', 'MSLLNTZ', 'LN']

出于上下文的考虑,我在这里试图做的是确定开放阅读框架。如果你觉得答案有用,可以自由接受,如果没有,可以详细说明。我注意到您的问题都没有接受答案。您可能希望删除单词边界“”位,因为M.*Z字符串似乎嵌入到另一个单词中,周围没有单词边界。谢谢,@timsheap,我误解了问题。如果没有捕获组,这将丢弃MZ字符串,贪婪匹配总是会分割出尽可能宽的字符串。@Cairnarvon,说得好……在我实际测试之后,下一次更新将在几分钟后进行。
re.split
将字符串作为其第一个参数,但是如果您真的想使用编译后的正则表达式,编译后的正则表达式对象有一个
split
方法。
>>> re.split('(M.*?Z)', "RERTCRPVNMVRNSRRTNSKSRSRHRZGRCRCGRHWVRNFDNPFISRYRRSZTSFFIFTVKFLSSYGLKKRKIKRTTVKVQGSTIMSLLNTZLN")
['RERTCRPVN', 'MVRNSRRTNSKSRSRHRZ', 'GRCRCGRHWVRNFDNPFISRYRRSZTSFFIFTVKFLSSYGLKKRKIKRTTVKVQGSTI', 'MSLLNTZ', 'LN']