Python在字符串中插入空格

时间:2017-12-07 16:09:55

标签: python python-3.x

好吧,我正在为学校做一个小项目,一个6帧翻译。我不会详细介绍,我只会描述我想要添加的内容。 正常输出将是:

TTCPTISPALGLAWS_DLGTLGFMSYSANTASGETLVSLYQLGLFEM_VVSYGRTKYYLICP_LFHLSVGFVPSD

这个字符串的重要部分是M和_(起始和终止密码子,生物学的东西)。我想做的是像这样强调这些:

TTCPTISPALGLAWS_DLGTLGF 'MSYSANTASGETLVSLYQLGLFEM_' VVSYGRTKYYLICP_LFHLSVGFVPSD

现在这里(对我而言)它变得棘手,我的输出看起来像这样(添加空格和'以突出显示开始和停止)。但它只做了一次,对于第一次开始和停止它发现。如果还有其他M ....._组合,则不会突出显示它们。

这是我当前的代码,尝试不止一次突出显示:

def start_stop(translation):
index_2 = 0
while True:
    if 'M' in translation[index_2::1]:
        index_1 = translation[index_2::1].find('M')
        index_2 = translation[index_1::1].find('_') + index_1
        new_translation = translation[:index_1] + " '" + \
                          translation[index_1:index_2 + 1] + "' " +\
                          translation[index_2 + 1:]
    else:
        break
    return new_translation

我真的以为这会做到,猜不是。所以现在我发现自己被卡住了。 如果你们中的任何人愿意尝试和帮助,这里是一个随机生成的字符串,其中包含多个M ....._集:

'TTCPTISPALGLAWS_DLGTLGFMSYSANTASGETLVSLYQLGLFEM_VVSYGRTKYYLICP_LFHLSVGFVPSDGRRLTLYMPPARRLATKSRFLTPVISSG_DKPRHNPVARSQFLNPLVRPNYSISASKSGLRLVLSYTRLSLGINSLPIERLQYSVPAPAQITP_IPEHGNARNFLPEWPRLLISEPAPSVNVPCSVFVVDPEHPKAHSKPDGIANRLTFRWRLIG_VFFHNAL_VITHGYSRVDILLPVSRALHVHLSKSLLLRSAWFTLRNTRVTGKPQTSKT_FDPKATRVHAIDACAE_QQH_PDSGLRFPAPGSCSEAIRQLMI'

感谢愿意提供帮助的任何人:)

2 个答案:

答案 0 :(得分:4)

正则表达式非常方便:

import re
sequence = "TTCP...."
highlighted = re.sub(r"(M\w*?_)", r" '\1' ", sequence)

# Output:
"TTCPTISPALGLAWS_DLGTLGF 'MSYSANTASGETLVSLYQLGLFEM_' VVSYGRTKYYLICP_LFHLSVGFVPSDGRRLTLY 'MPPARRLATKSRFLTPVISSG_' DKPRHNPVARSQFLNPLVRPNYSISASKSGLRLVLSYTRLSLGINSLPIERLQYSVPAPAQITP_IPEHGNARNFLPEWPRLLISEPAPSVNVPCSVFVVDPEHPKAHSKPDGIANRLTFRWRLIG_VFFHNAL_VITHGYSRVDILLPVSRALHVHLSKSLLLRSAWFTLRNTRVTGKPQTSKT_FDPKATRVHAIDACAE_QQH_PDSGLRFPAPGSCSEAIRQLMI"

正则表达式解释:
我们寻找M后跟任意数量的"字符" \w*然后是_,使用?使其成为非贪婪的匹配(否则它只会从第一个M到最后一个{{1 }})。
替换是匹配的组(_表示"第一组",只有一个),但被空格和引号包围。

答案 1 :(得分:0)

您只需要一小部分“切片”模块,您不需要任何外部模块:

  

Python字符串有一个名为'index'的方法,只需使用它。

string_1='TTCPTISPALGLAWS_DLGTLGFMSYSANTASGETLVSLYQLGLFEM_VVSYGRTKYYLICP_LFHLSVGFVPSD'

before=string_1.index('M')
after=string_1[before:].index('_')
print('{}  {} {}'.format(string_1[:before],string_1[before:before+after+1],string_1[before+after+1:]))
  

输出:

TTCPTISPALGLAWS_DLGTLGF  MSYSANTASGETLVSLYQLGLFEM_ VVSYGRTKYYLICP_LFHLSVGFVPSD