给出如下字符串:
1|2||||auc|0|1||0|||76u|
^
在第5个'|'之后返回子字符串的最有效方法是什么? 例如,给定上面的字符串,结果应为:
auc|0|1||0|||76u|
答案 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|'