如何在第二次出现字符串之前拆分字符串?

时间:2017-10-13 23:53:34

标签: python python-3.x

假设我有字符串NYKMIANYKCLE,我想将其拆分为仅包含NYKMIANYKCLE的列表(在第二次出现'NYK'之前拆分)。有没有办法在python中做到这一点?

4 个答案:

答案 0 :(得分:1)

您可以使用re.findall查找以NYK开头的所有子字符串,不包含其他NYK或后跟字符串结尾字符:

>>> s = 'NYKMIANYKCLE'
>>> import re
>>> re.findall(r'NYK.+?(?=NYK|$)', s)
['NYKMIA', 'NYKCLE']

第一个?确保搜索非贪婪;一次一个子字符串,而(?=NYK|$)强制断言子字符串在下一个NYK...子字符串或字符串结尾字符$之前。

更多测试:

>>> s = 'NYKMIANYKCLENYKjahsja'
>>> re.findall(r'NYK.+?(?=NYK|$)', s)
['NYKMIA', 'NYKCLE', 'NYKjahsja']

答案 1 :(得分:0)

您可以尝试这样的事情:

string = 'NYKMIANYKCLE'
substring = 'NYK'

first_index = string.index(substring)
second_index = string.index(substring, first_index + len(substring))
print string[:second_index], string[second_index:]

答案 2 :(得分:0)

由于问题是关于拆分,可以使用新的regex module来完成,  允许使用零宽度字符进行拆分

import regex
s='NYKMIANYKCLE'
print(regex.split('(?V1)(?=NYK)',s))

<强>输出

['', 'NYKMIA', 'NYKCLE']

<强>更新

避免在行的开头分割

print(regex.split('(?V1)[^^](?=NYK)',s))

<强>输出

['NYKMI', 'NYKCLE']

<强>解释

(?V1)      #Forces new version 2 of split which allows zero width chars for split
[^^]       #don't take line beginning as split
(?=NYK)    #take a position as split if the position is followed by NYK

答案 3 :(得分:-1)

import re
re.findall("NYK[A-Z]+", "NYKMIANYKCLE")

来自文档:

  

findall(pattern,string,flags = 0)

     

返回字符串中pattern的所有非重叠匹配,作为字符串列表。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。结果中包含空匹配,除非它们触及另一场比赛的开头。