2013-05-09 104 views
0

嘿,我在这里看到的人们如何将字符串分割成指定的字符,这很简单。我需要知道的是如何2个字符在python中围绕字符分割一个字符串

之间分割字符串

即拆分为字符串以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后打散列表,并试图串连“Z”到每年年底。

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

+0

为背景的缘故什么,我想在这里做的是确定开放阅读框 – 2013-05-09 03:17:58

+1

随意接受一个答案,如果你觉得有用,或阐述如果没有。我注意到你的问题都没有接受答案。 – Cairnarvon 2013-05-09 16:58:02

回答

0

这听起来象是为re.split

即:

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

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

编辑: 每添堆更新,因为我误解了 “以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'] 
+0

你可能想要删除的字边界“<' and '>”位,为M. * Z串似乎被嵌入另一个词与它周围的无字边界。 – 2013-05-09 03:23:44

+0

谢谢@TimHeap,我误解了这个问题。 – 2013-05-09 03:27:24

+0

如果没有捕获组,这将丢弃MZ字符串,贪婪的匹配将始终分割出尽可能广泛的字符串。 – Cairnarvon 2013-05-09 03:30:29

1

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

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

或者,如果你想保持在b中的字符串切口白内障手术挽还有:

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