在python中的特定字母处分割字符串,除非后面有另一个字母

时间:2018-07-30 13:41:50

标签: python regex

所以我有字符串

sequence = 'MYNSIYGSPFPKINPKVRYKTALERAGFDTKPRNPFSSQRNASTGSLQASVKSPPITRQRNVSAAPSVPVTMKSAYTASSKSAYSSVKGESDIYPPPVLENSERRSVTPPKNSNFTSSRPSDISRSISRPSERASQEDPFRFERDLDRQAEQYAASRHTCKSPANKEFQAADNFPFNFEQEDAGNTEREQDLSPIERSFMMLTQNDTASVVNSMNQTDNRGVLDQKLGKEQQKEESSIEYESEGQQEDENDIESLNFEPDPKLQMNLENEPLQDDFPEAKQEEKNTEPKIPEINVTRESNTPSLTMNALDSKIYPDDNFSGLESSKEQKSPGVSSSSTKVEDLSLDGLNEKRLSITSSENVETPYTATNLQVEQLIAQLDDVSLSRNAKLDMNGNCLNAVDRKASRFKKSSAYLSGYPSMDIPVTQQTSIVQNSNTNLSRQTILVDKGDVDEDAPSESTTNGGTPIFYKFKQSNVEYSNNEGMGSQETFRTKLPTIEALQLQHKRNITDLREEIDNSKSNDSHVLPNGGTTRYSSDADYKETEPIEFKYPPGEGPCRACGLEVTGKRMFSKKENELSGQWHRECFKCIECGIKFNKHVPCYILGDEPYCQKHYHEENHSICKVCSNFIEGECLENDKVERFHVDCLNCFLCKTAITNDYYIFNGEIPLCGNHDMEALLKEGIDNATSSNDKNNTLSKRRTRLINFN'

我想在每个'K''R'之后分割此字符串,除非两个字母后面都带有'P'。最简单的方法是什么?

要重申:在'K''R'而不是{{11},'KP'处分割字符串。

1 个答案:

答案 0 :(得分:4)

尝试使用负前瞻进行拆分:

re.split(r'[KR](?!P)', sequence)

如果要拆分在此过程中消耗/删除KR字母,这将是正确的答案。如果您想在保留所有字符的同时先于KR进行拆分(并且P不进行 进行),那么我们就不能只做一个简单的re.split ,因为它不支持向后看。

一种解决方法可能是先全部替换,然后在应该进行拆分的每个位置插入标记符号,例如$,它不会出现在当前输入的任何位置。然后,我们可以对该标记字符进行简单的拆分,以获得所需的结果。

sequence = 'MYNSIYGSPFPK...'
seq_new = re.sub("([KR])([^P])", r'\1$\2', sequence)  # insert '$' markers
result = re.split(r'\$', seq_new)         # split at '$' and consume the '$'
print result

['MYNSIYGSPFPK', 'INPK', 'VR', 'YK', 'TALER', 'AGFDTKPR', 'NPFSSQR', ...

Demo

相关问题