在第n' |'之后找到子字符串。

时间:2015-01-16 17:26:50

标签: python python-2.7 split

给出如下字符串:

1|2||||auc|0|1||0|||76u|
      ^ 

在第5个'|'之后返回子字符串的最有效方法是什么? 例如,给定上面的字符串,结果应为:

auc|0|1||0|||76u|

4 个答案:

答案 0 :(得分:4)

使用str.split

s = '1|2||||auc|0|1||0|||76u|'
print s.split('|', 5)[-1]
# auc|0|1||0|||76u|

注意,如果不是至少5 | s,这可能会导致意外结果,例如,

'1|2'.split('|', 5)[-1]
# returns 2 - which isn't *after* the 5th

出现在字符串中,所以你可能希望将它包装在try / except中并强制处理没有足够| s的情况,以便结果在第5个之后< / em>是空的,因为没有出现。

try:
    rest = s.split('|', 5)[5]
except IndexError:
    rest = ''

答案 1 :(得分:2)

使用带有限制的str.split() method(第二个参数):

input_string.split('|', 5)[-1]

这会将字符串拆分5次,然后取出最后一个元素,其余的|字符未分割。

如果字符串中的少于<{em>> 5个|个字符,您仍然会从分割中获取最后一个元素,因为[-1]从结尾开始计算。这意味着即使分割中存在管道符号,表达式也会继续工作。

演示:

>>> input_string = '1|2||||auc|0|1||0|||76u|'
>>> input_string.split('|', 5)
['1', '2', '', '', '', 'auc|0|1||0|||76u|']
>>> input_string.split('|', 5)[-1]
'auc|0|1||0|||76u|'

并引用文档:

  

如果给出 maxsplit ,则最多 maxsplit 分割完成(因此,该列表最多只有maxsplit+1个元素。)

答案 2 :(得分:0)

def get_substring(my_string):
    count = 0
    for i, char in enumerate(my_string):
        if char == '|':
            count += 1
            if count == 5:
                return my_string[i+1:]

答案 3 :(得分:0)

s = '1|2||||auc|0|1||0|||76u|'
sre =  re.compile('([^|]*)(' + r*4 + ')(.*)')

sre.search(s).groups()
Out[39]: ('1', '|2|||', '|auc|0|1||0|||76u|')

sre.search(s).group(3)[1:]
Out[40]: 'auc|0|1||0|||76u|'