Split string with multiple delimiters in Python [duplicate] Split string with multiple delimiters in Python [duplicate] python python

Split string with multiple delimiters in Python [duplicate]


Luckily, Python has this built-in :)

import rere.split('; |, ',str)

Update:
Following your comment:

>>> a='Beautiful, is; better*than\nugly'>>> import re>>> re.split('; |, |\*|\n',a)['Beautiful', 'is', 'better', 'than', 'ugly']


Do a str.replace('; ', ', ') and then a str.split(', ')


Here's a safe way for any iterable of delimiters, using regular expressions:

>>> import re>>> delimiters = "a", "...", "(c)">>> example = "stackoverflow (c) is awesome... isn't it?">>> regexPattern = '|'.join(map(re.escape, delimiters))>>> regexPattern'a|\\.\\.\\.|\\(c\\)'>>> re.split(regexPattern, example)['st', 'ckoverflow ', ' is ', 'wesome', " isn't it?"]

re.escape allows to build the pattern automatically and have the delimiters escaped nicely.

Here's this solution as a function for your copy-pasting pleasure:

def split(delimiters, string, maxsplit=0):    import re    regexPattern = '|'.join(map(re.escape, delimiters))    return re.split(regexPattern, string, maxsplit)

If you're going to split often using the same delimiters, compile your regular expression beforehand like described and use RegexObject.split.


If you'd like to leave the original delimiters in the string, you can change the regex to use a lookbehind assertion instead:

>>> import re>>> delimiters = "a", "...", "(c)">>> example = "stackoverflow (c) is awesome... isn't it?">>> regexPattern = '|'.join('(?<={})'.format(re.escape(delim)) for delim in delimiters)>>> regexPattern'(?<=a)|(?<=\\.\\.\\.)|(?<=\\(c\\))'>>> re.split(regexPattern, example)['sta', 'ckoverflow (c)', ' is a', 'wesome...', " isn't it?"]

(replace ?<= with ?= to attach the delimiters to the righthand side, instead of left)