Split string with multiple delimiters in Python [duplicate]
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)