[英]Find the sub-string after nth '|'
给定一个字符串,如下所示:
1|2||||auc|0|1||0|||76u|
^
在第五个“ |”之后返回子字符串的最有效方法是什么? 例如,给定以上字符串,结果应为:
auc|0|1||0|||76u|
使用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号之后的结果为空,因为不存在5。
try:
rest = s.split('|', 5)[5]
except IndexError:
rest = ''
使用带有限制(第二个参数)的str.split()
方法 :
input_string.split('|', 5)[-1]
这会将字符串拆分5次,并获取最后一个元素,其中剩余的|
字符未拆分。
如果少于 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|'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.