嘿,我在这里看到的答案是如何在指定字符处拆分字符串,这非常简单。我需要知道的是如何在两个字符之间分割字符串
即拆分以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的末尾。
有没有人知道如何更有效地做到这一点?
答案 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']