Python 查找第n个“|”后面的子字符串
给定一个字符串,如下所示:Python 查找第n个“|”后面的子字符串,python,python-2.7,split,Python,Python 2.7,Split,给定一个字符串,如下所示: 1|2||||auc|0|1||0|||76u| ^ 在第5个“|”之后返回子字符串的最有效方法是什么? 例如,给定上述字符串,结果应为: auc|0|1||0|||76u| 使用str.split: 注意,如果没有至少5 | s,这可能会导致不期望的结果,例如 存在于字符串中,因此您可能希望将其包装为try/except并强制处理没有足够的| s的情况,以便第5个之后的结果为空,因为没有5个存在 try: rest = s.split('|
1|2||||auc|0|1||0|||76u|
^
在第5个“|”之后返回子字符串的最有效方法是什么?
例如,给定上述字符串,结果应为:
auc|0|1||0|||76u|
使用str.split:
注意,如果没有至少5 | s,这可能会导致不期望的结果,例如
存在于字符串中,因此您可能希望将其包装为try/except并强制处理没有足够的| s的情况,以便第5个之后的结果为空,因为没有5个存在
try:
rest = s.split('|', 5)[5]
except IndexError:
rest = ''
使用str.split:
注意,如果没有至少5 | s,这可能会导致不期望的结果,例如
存在于字符串中,因此您可能希望将其包装为try/except并强制处理没有足够的| s的情况,以便第5个之后的结果为空,因为没有5个存在
try:
rest = s.split('|', 5)[5]
except IndexError:
rest = ''
使用带有第二个参数的limit:
input_string.split('|', 5)[-1]
这会将字符串拆分5次,并获取最后一个元素,该元素具有未拆分的剩余|字符
如果字符串中的字符少于5个|字符,您仍将从拆分中获取最后一个元素,因为[-1]从末尾开始计数。这意味着即使拆分中没有管道符号,表达式也会继续工作
演示:
并引用文件:
如果给定maxsplit,则最多执行maxsplit拆分。因此,列表最多包含maxsplit+1个元素
使用带有第二个参数的limit:
input_string.split('|', 5)[-1]
这会将字符串拆分5次,并获取最后一个元素,该元素具有未拆分的剩余|字符
如果字符串中的字符少于5个|字符,您仍将从拆分中获取最后一个元素,因为[-1]从末尾开始计数。这意味着即使拆分中没有管道符号,表达式也会继续工作
演示:
并引用文件:
如果给定maxsplit,则最多执行maxsplit拆分。因此,列表最多包含maxsplit+1个元素
漂亮干净的解决方案。请允许我为记录添加一些有希望的常识:如果您有充分的理由认为大部分字符串的管道少于五个,那么您可能希望首先拆分并检查结果的长度,而不是捕获错误。这是一个很好的干净解决方案。请允许我为记录添加一些有希望的常识:如果您有很好的理由期望字符串的大部分将少于五个管道,那么您可能希望首先拆分并检查结果的长度,而不是捕获错误。
input_string.split('|', 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|'
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|'