Python在某个ch之前分裂

2024-05-15 01:30:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下字符串:

BUCKET1:/dir1/dir2/BUCKET1:/dir3/dir4/BUCKET2:/dir5/dir6

我试图将其拆分为以下dict/other数据结构:

^{pr2}$

如果我只有一个桶,而不是多个桶,我可以把它分开,就像这样:

res.split(res.split(':', 1)[0].replace('.', '').upper()) -> it's not perfect 

输入:ADRIAN:/dir1/dir11/DANIEL:/dir2/ADI_BUCKET:/dir3/CULEA:/dir4/ADRIAN:/dir5/ADRIAN:/dir6/

输出:[(ADRIAN,/dir1/dir11),(DANIEL,/dir2/),(CULEA,/dir3/),(ADRIAN,/dir5/),(ADRIAN,/dir6/)


根据Wiktor Stribiżew的评论,以下正则表达式起作用:

 r"(BUCKET1|BUCKET2):(.*?)(?=(?:BUCKET1|BUCKET2)|$)"

Tags: 字符串ressplitdanieladriandir1dir2bucket1
3条回答

使用re.findall()函数:

s = "ADRIAN:/dir1/dir11/DANIEL:/dir2/ADI_BUCKET:/dir3/CULEA:/dir4/ADRIAN:/dir5/ADRIAN:/dir6/"
result = re.findall(r'(\w+):([^:]+\/)', s)

print(result)

输出:

^{pr2}$

如果你有经验,我建议像其他人建议的那样学习Regex。但是,如果您正在寻找替代方法,这里有一种不使用Regex的方法。它也会产生你想要的输出。在

string = input("Enter:") #Put your own input here.

tempList = string.replace("BUCKET",':').split(":")
outputList = []
for i in range(1,len(tempList)-1,2):
    someTuple = ("BUCKET"+tempList[i],tempList[i+1])
    outputList.append(someTuple)

print(outputList) #Put your own output here.

这将产生:

^{pr2}$

如果您不熟悉Regex,希望这段代码更容易理解和操作,尽管如果您熟悉如何使用它,我还是建议Regex来解决这个问题。在

改用正则表达式?在

impore re
test = 'BUCKET1:/dir1/dir2/BUCKET1:/dir3/dir4/BUCKET2:/dir5/dir6'

output = re.findall(r'(?P<bucket>[A-Z0-9]+):(?P<path>[/a-z0-9]+)', test)
print(output)

这给了

^{pr2}$

相关问题 更多 >

    热门问题