2013-05-09 96 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']