【发布时间】:2015-01-16 17:26:49
【问题描述】:
给定一个字符串如下:
1|2||||auc|0|1||0|||76u|
^
在第 5 个“|”之后返回子字符串的最有效方法是什么? 例如,给定上面的字符串,结果应该是:
auc|0|1||0|||76u|
【问题讨论】:
标签: python python-2.7 split
给定一个字符串如下:
1|2||||auc|0|1||0|||76u|
^
在第 5 个“|”之后返回子字符串的最有效方法是什么? 例如,给定上面的字符串,结果应该是:
auc|0|1||0|||76u|
【问题讨论】:
标签: python python-2.7 split
使用str.split:
s = '1|2||||auc|0|1||0|||76u|'
print s.split('|', 5)[-1]
# auc|0|1||0|||76u|
注意,如果|s 少于 5 个,这可能会导致不希望的结果,例如,
'1|2'.split('|', 5)[-1]
# returns 2 - which isn't *after* the 5th
存在于字符串中,因此您可能希望将其包装在 try/except 中并强制处理|s 不足的情况,以便 5 号之后 的结果为空的,因为没有 5 个在场。
try:
rest = s.split('|', 5)[5]
except IndexError:
rest = ''
【讨论】:
使用带有限制的str.split() method(第二个参数):
input_string.split('|', 5)[-1]
这会将字符串拆分 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个元素)。
【讨论】:
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:]
【讨论】:
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|'
【讨论】: