我有一个表示路径的字符串:
'../../../folder.123/../..'
我的目标是像这样将字符串分成两部分:
('../../../folder.123','/../..')
换句话说,在第一次出现子字符串的情况下,请在第一个可用的分隔符(在本例中为/
)处进行分割。
我想到的算法是:
但是对于一个用于拆分字符串的pythonic函数,它看起来确实工作太多了……是否缺少我想要的内置函数或可以用于实现目标的条件切片? / p>
答案 0 :(得分:1)
如果我正确理解了您的问题,可以这样做:
substr = 'folder.123'
location = '../../../folder.123/../..'
separated = location.split(substr, 1)
separated[0] += substr
这给出了:
['../../../folder.123', '/../..']
答案 1 :(得分:1)
您可以尝试为此作业使用正则表达式。
请注意,根据您唯一的示例,这是一个非常具体的(同时也是通用的)正则表达式。
import re
_REGEX = re.compile('^(((\.\.?)?\/)*[^\/]*)((\/?(\.\.)?)*)$')
def split_path(path):
structure = _REGEX.match(path or '').groups()
return structure[0], structure[3]
>>> split_path('../../../folder.123/../..')
('../../../folder.123', '/../..')
>>> split_path('../../../folder.123')
('../../../folder.123', '')
>>> split_path('folder.123')
('folder.123', '')
>>> split_path('/')
('/', '')
>>> split_path('')
('', '')
答案 2 :(得分:0)
str.parition
似乎正是您想要的:
str
。partition
( sep )在 sep 的首次出现处拆分字符串,并返回一个三元组,其中包含分隔符之前的部分,即分隔符 本身,以及分隔符后的部分。如果分隔符不是 找到,返回一个包含字符串本身的三元组,然后是两个 空字符串。
s = '../../../folder.123/../..'
p1, p2, p3 = s.partition('folder.123')
my_tup = (p1 + p2, p3)
# ('../../../folder.123', '/../..')