python:conditinoally拆分字符串

Tho*_*mas 2 python

关于python中的split有很多问题,但我找不到与我的问题相对应的问题.我想拆分一个字符串,但需要为拆分器设置不同的值,具体取决于条件.对于测试用例,我的字符串是"11xx22xx33xxBEGINxx44xx55xxENDxx66xx77".我想以块的形式处理这个字符串,这意味着我想像这样一步一步:

分开'11',用它做点什么

分开'22',用它做点什么

分开'33',用它做点什么

拆分'BEGINxx44xx55xxEND',用它做点什么

分开'66',用它做点什么

分开'77',用它做点什么

我尝试了一个递归函数:

import string

mystring = "11xx22xx33xxBEGINxx44xx55xxENDxx66xx77"

def makechunks(s):
    try: splitter
    except NameError:
        splitter = "xx"
    whole = s.split(splitter, 1)
    current = whole[0]
    try: whole[1]
    except NameError:
        return
    else:
        rest = whole[1]
        if current.find("BEGIN", 0, 5):
            splitter = "END"
        else:
            splitter = "xx"
        makechunks(rest)
        print("AA", current, "BB")

makechunks(mystring)
Run Code Online (Sandbox Code Playgroud)

但我得到错误"列表索引超出范围." 也许我的整个方法都存在缺陷,有更好的方法可以实现我想要的目标吗?任何暗示我都会感激不尽.

谢谢!

Mar*_*ers 5

您可以使用正则表达式执行此操作:

matches = re.findall('(?:^|xx)(BEGIN.*?END|.*?)(?=xx|$)', s)
Run Code Online (Sandbox Code Playgroud)

结果:

['11', '22', '33', 'BEGINxx44xx55xxEND', '66', '77']
Run Code Online (Sandbox Code Playgroud)

看到它在线工作:ideone