在给定ch的第n次出现处拆分字符串

2024-04-26 09:39:55 发布

您现在位置:Python中文网/ 问答频道 /正文

在给定分隔符第n次出现后是否有Python方法拆分字符串?

给定字符串:

'20_231_myString_234'

应将其拆分为(在第二次出现后,分隔符为“u”):

['20_231', 'myString_234']

或是唯一的方法来完成这个计数,分裂和加入?


Tags: 方法字符串计数分隔符mystring
3条回答
>>> n = 2
>>> groups = text.split('_')
>>> '_'.join(groups[:n]), '_'.join(groups[n:])
('20_231', 'myString_234')

似乎这是最可读的方法,另一种方法是regex)

我喜欢这个解决方案,因为它不需要任何实际的regex,而且可以很容易地适应另一个“n”或分隔符。

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)

使用re获取^((?:[^_]*_){n-1}[^_]*)_(.*)形式的正则表达式,其中n是一个变量:

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

相关问题 更多 >