Is there a Python-way to split a string after the nth occurrence of a given delimiter?
Given a string:
'20_231_myString_234'
It should be split into (with the delimiter being '_', after its second occurrence):
['20_231', 'myString_234']
Or is the only way to accomplish this to count, split and join?
To split a string with specific character as delimiter in Java, call split() method on the string object, and pass the specific character as argument to the split() method. The method returns a String Array with the splits as elements in the array.
To split a JavaScript string only on the first occurrence of a character, call the slice() method on the string, passing it the index of the character + 1 as a parameter. The slice method will return the portion of the string after the first occurrence of the character.
1) Select Lookup from the drop-down list of Formula Type section; 2) Choose Find where the character appear Nth in a string in Choose a formula section; 3) Select the cell which contains the string you use, then type the specified character and nth occurrence in to the textboxes in the Arguments input section.
a. split("-", 2) will split the string upto the second occurrence of - . a.
>>> n = 2 >>> groups = text.split('_') >>> '_'.join(groups[:n]), '_'.join(groups[n:]) ('20_231', 'myString_234')
Seems like this is the most readable way, the alternative is regex)
Using re
to get a regex of the form ^((?:[^_]*_){n-1}[^_]*)_(.*)
where n
is a variable:
n=2 s='20_231_myString_234' m=re.match(r'^((?:[^_]*_){%d}[^_]*)_(.*)' % (n-1), s) if m: print m.groups()
or have a nice function:
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)
Or without regexes, using iterative find:
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With