有很多关于python拆分的问题,但我找不到 对应我的问题。我想拆分一个字符串,但需要 分离器的不同值,具体取决于条件。为了测试 case,我的字符串是“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)
但我收到的错误是“列表索引超出范围”。也许是我的全部 方法是有缺陷的,有更好的方法来实现我想要的?生病 感谢任何提示。
谢谢!
答案 0 :(得分:5)
您可以使用正则表达式执行此操作:
matches = re.findall('(?:^|xx)(BEGIN.*?END|.*?)(?=xx|$)', s)
结果:
['11', '22', '33', 'BEGINxx44xx55xxEND', '66', '77']
查看在线工作:ideone
答案 1 :(得分:1)
如何分割它们然后加入BEGIN和END之间的所有内容?
ssplit = mystring.split("xx")
bIndex = ssplit.index("BEGIN")
eIndex = ssplit.index("END")
bend = "xx".join(ssplit[bIndex:eIndex+1])
others = ssplit[:bIndex] + ssplit[eIndex+1:]
现在你在'弯曲'中有你的BEGIN..END标记,在'其他'中有剩余的标记