第一次出现后在分隔符处分割字符串

时间:2019-02-19 15:55:36

标签: python split

我有一个表示路径的字符串:

'../../../folder.123/../..'

我的目标是像这样将字符串分成两部分:

('../../../folder.123','/../..')

换句话说,在第一次出现子字符串的情况下,请在第一个可用的分隔符(在本例中为/)处进行分割。

我想到的算法是:

  • 根据os.path.sep分割字符串
  • 找到与子字符串(“。”即匹配)匹配的第一个列表元素的索引
  • 在两个变量中连接令牌列表的元素,直到找到的索引为止

但是对于一个用于拆分字符串的pythonic函数,它看起来确实工作太多了……是否缺少我想要的内置函数或可以用于实现目标的条件切片? / p>

3 个答案:

答案 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', '/../..')