如何选择某个位置以“ _”分隔python字符串

时间:2019-07-27 18:33:56

标签: python string split python-regex

我有一个像这样的字符串'00004079_20150427_5_169_192_114.npz',我想将其拆分为这个['00004079_20150427_5', '169_192_114.npz']

我尝试了python字符串split()方法,

a = '00004079_20150427_5_169_192_114.nii.npz'
a.split("_",3)

但是它返回了这个

>>> ['00004079', '20150427', '5', '169_192_114.nii.npz']

如何通过第三个“ _”外观将其分为2部分?谢谢!

更多
我尝试过了

reg = ".*\_.*\_.\_"
re.split(reg, a)

但它返回

>>> ['', '169_192_114.nii.npz']

2 个答案:

答案 0 :(得分:4)

您最多可以基于定界符_拆分字符串3次,然后将除最后一个值以外的所有内容重新加入

>>> *start, end = s.split('_', 3)
>>> start = '_'.join(start)
>>> 
>>> start
'00004079_20150427_5'
>>> end
'169_192_114.npz'

对于 python2 ,您可以代替此操作

>>> lst = s.split('_', 3)
>>> end = lst.pop()
>>> start = '_'.join(lst)
>>> 
>>> start
'00004079_20150427_5'
>>> end
'169_192_114.npz'

答案 1 :(得分:1)

一种可能的方法(如果使用正则表达式):

import re

s = '00004079_20150427_5_169_192_114.nii.npz'
res = re.search(r'^((?:[^_]+_){2}[^_]+)_(.+)', s)
print(res.groups())

输出:

('00004079_20150427_5', '169_192_114.nii.npz')