import re
string = "20_231_myString_234"
occur = 2 # on which occourence you want to split
indices = [x.start() for x in re.finditer("_", string)]
part1 = string[0:indices[occur-1]]
part2 = string[indices[occur-1]+1:]
print (part1, ' ', part2)
n=2
s='20_231_myString_234'
m=re.match(r'^((?:[^_]*_){%d}[^_]*)_(.*)' % (n-1), s)
if m: print m.groups()
或者有一个很好的功能:
import re
def nthofchar(s, c, n):
regex=r'^((?:[^%c]*%c){%d}[^%c]*)%c(.*)' % (c,c,n-1,c,c)
l = ()
m = re.match(regex, s)
if m: l = m.groups()
return l
s='20_231_myString_234'
print nthofchar(s, '_', 2)
或者不使用正则表达式,使用迭代查找:
def nth_split(s, delim, n):
p, c = -1, 0
while c < n:
p = s.index(delim, p + 1)
c += 1
return s[:p], s[p + 1:]
s1, s2 = nth_split('20_231_myString_234', '_', 2)
print s1, ":", s2
似乎这是最可读的方法,另一种方法是regex)
我喜欢这个解决方案,因为它不需要任何实际的regex,而且可以很容易地适应另一个“n”或分隔符。
使用
re
获取^((?:[^_]*_){n-1}[^_]*)_(.*)
形式的正则表达式,其中n
是一个变量:或者有一个很好的功能:
或者不使用正则表达式,使用迭代查找:
相关问题 更多 >
编程相关推荐