【问题标题】:Splitting string at specific letters in python except when followed by another letter [duplicate]在python中的特定字母处拆分字符串,除非后面跟着另一个字母[重复]
【发布时间】:2019-01-06 18:50:57
【问题描述】:

所以我有字符串

sequence = 'MYNSIYGSPFPKINPKVRYKTALERAGFDTKPRNPFSSQRNASTGSLQASVKSPPITRQRNVSAAPSVPVTMKSAYTASSKSAYSSVKGESDIYPPPVLENSERRSVTPPKNSNFTSSRPSDISRSISRPSERASQEDPFRFERDLDRQAEQYAASRHTCKSPANKEFQAADNFPFNFEQEDAGNTEREQDLSPIERSFMMLTQNDTASVVNSMNQTDNRGVLDQKLGKEQQKEESSIEYESEGQQEDENDIESLNFEPDPKLQMNLENEPLQDDFPEAKQEEKNTEPKIPEINVTRESNTPSLTMNALDSKIYPDDNFSGLESSKEQKSPGVSSSSTKVEDLSLDGLNEKRLSITSSENVETPYTATNLQVEQLIAQLDDVSLSRNAKLDMNGNCLNAVDRKASRFKKSSAYLSGYPSMDIPVTQQTSIVQNSNTNLSRQTILVDKGDVDEDAPSESTTNGGTPIFYKFKQSNVEYSNNEGMGSQETFRTKLPTIEALQLQHKRNITDLREEIDNSKSNDSHVLPNGGTTRYSSDADYKETEPIEFKYPPGEGPCRACGLEVTGKRMFSKKENELSGQWHRECFKCIECGIKFNKHVPCYILGDEPYCQKHYHEENHSICKVCSNFIEGECLENDKVERFHVDCLNCFLCKTAITNDYYIFNGEIPLCGNHDMEALLKEGIDNATSSNDKNNTLSKRRTRLINFN'

我想在每个'K''R' 之后拆分此字符串,除非任一字母后跟'P'。最简单的方法是什么?

重申:在'K''R' 处拆分字符串,而不是在'KP''RP'

【问题讨论】:

  • 请告诉我们您的预期输出是什么。而且您的问题中不需要这么长的示例输入字符串。

标签: python regex


【解决方案1】:

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

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

【讨论】:

  • 但这会删除KR,而不是在它之后拆分。
  • @Tomalak 是的,这就是为什么我很惊讶这么多人支持这个。
  • @Tomalak 在最后一句话中说 split at....
  • @SebastianProske re.split 不直接支持lookbehinds,但我们可以做一些变通方法。
  • @Tim 不知道你为什么要 ping 我?如果您想将 stackoverflow.com/questions/2713060/… 添加到重复列表中,您应该 ping Wiktor。
猜你喜欢
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 2016-08-09
  • 2019-08-08
  • 1970-01-01
相关资源
最近更新 更多