Tutorial :split string on a number of different characters



Question:

I'd like to split a string using one or more separator characters.

E.g. "a b.c", split on " " and "." would give the list ["a", "b", "c"].

At the moment, I can't see anything in the standard library to do this, and my own attempts are a bit clumsy. E.g.

def my_split(string, split_chars):      if isinstance(string_L, basestring):          string_L = [string_L]      try:          split_char = split_chars[0]      except IndexError:          return string_L        res = []      for s in string_L:          res.extend(s.split(split_char))      return my_split(res, split_chars[1:])    print my_split("a b.c", [' ', '.'])  

Horrible! Any better suggestions?


Solution:1

>>> import re  >>> re.split('[ .]', 'a b.c')  ['a', 'b', 'c']  


Solution:2

This one replaces all of the separators with the first separator in the list, and then "splits" using that character.

def split(string, divs):      for d in divs[1:]:          string = string.replace(d, divs[0])      return string.split(divs[0])  

output:

>>> split("a b.c", " .")  ['a', 'b', 'c']    >>> split("a b.c", ".")  ['a b', 'c']  

I do like that 're' solution though.


Solution:3

Solution without re:

from itertools import groupby  sep = ' .,'  s = 'a b.c,d'  print [''.join(g) for k, g in groupby(s, sep.__contains__) if not k]  

An explanation is here https://stackoverflow.com/a/19211729/2468006


Solution:4

Not very fast but does the job:

def my_split(text, seps):    for sep in seps:      text = text.replace(sep, seps[0])    return text.split(seps[0])  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »