0

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

即拆分以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”连接到每个末尾。

有谁知道更有效地做到这一点的方法?

4

2 回答 2

1

您可以使用正则表达式从字符串中提取所有以 M 开头并以 Z 结尾的字符串:

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

或者,如果您还想将字符串保留在两者之间:

>>> re.split('(M.*?Z)', "RERTCRPVNMVRNSRRTNSKSRSRHRZGRCRCGRHWVRNFDNPFISRYRRSZTSFFIFTVKFLSSYGLKKRKIKRTTVKVQGSTIMSLLNTZLN")
['RERTCRPVN', 'MVRNSRRTNSKSRSRHRZ', 'GRCRCGRHWVRNFDNPFISRYRRSZTSFFIFTVKFLSSYGLKKRKIKRTTVKVQGSTI', 'MSLLNTZ', 'LN']
于 2013-05-09T03:20:14.630 回答
0

这听起来像是re.split

IE:

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']
于 2013-05-09T03:19:36.340 回答