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

时间:2013-05-09 03:15:16

标签: python string list loops split

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

即拆分以M开头并以Z结尾的字符串 RERTCRPVNMVRNSRRTNSKSRSRHRZGRCRCGRHWVRNFDNPFISRYRRSZTSFFIFTVKFLSSYGLKKRKIKRTTVKVQGSTIMSLLNTZLN

成 RERTCRPVN MVRNSRRTNSKSRSRHRZ GRCRCGRHWVRNFDNPFISRYRRSZTSFFIFTVKFLSSYGLKKRKIKRTTVKVQGSTI MSLLNTZ LN

以后只保留那些所需的。

我可能会像

一样形成某种奇怪的循环
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之后将LIST拆分并尝试将'Z'连接到每个Z的末尾。

有没有人知道如何更有效地做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以使用regular expressions提取以M开头并以字符串结尾的所有字符串:

>>> re.findall('M.*?Z', "RERTCRPVNMVRNSRRTNSKSRSRHRZGRCRCGRHWVRNFDNPFISRYRRSZTSFFIFTVKFLSSYGLKKRKIKRTTVKVQGSTIMSLLNTZLN")
['MVRNSRRTNSKSRSRHRZ', 'MSLLNTZ']

或者,如果你想保持字符串介于两者之间:

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

答案 1 :(得分:0)

这听起来像re.split

即:

import re
ex = re.compile("M.*Z")

splitted = re.split(ex, <some input string>)

修改 每个Tim Heap都更新了,因为我误解了“以M开头,以Z结尾”,发生在字边界。

编辑2: 在@ Cairnarvon的反馈之后,这是一个有效的例子(令人惊讶的是,re.split不接受re.compile的结果,你必须将正则表达式作为字符串传递:

>>> 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']