繁体   English   中英

在第n个“ |”之后找到子字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM