(私にとって)正規表現の解決策はかなり簡単に思えます:
import re
def split_string(source,separators):
return re.split('[{0}]'.format(re.escape(separators)),source)
例:
>>> import re
>>> def split_string(source,separators):
... return re.split('[{0}]'.format(re.escape(separators)),source)
...
>>> split_string("the;foo: went to the store",':;')
['the', 'foo', ' went to the store']
ここで正規表現を使用する理由は、セパレーターを使用したくない' '
場合に備えて、これでも機能します...
複数文字のセパレーターを使用できる代替手段(私が好むと思います)は次のとおりです。
def split_string(source,separators):
return re.split('|'.join(re.escape(x) for x in separators),source)
この場合、複数文字のセパレーターは文字列以外のイテラブル (タプルやリストなど) として渡されますが、1 文字のセパレーターは 1 つの文字列として渡すことができます。
>>> def split_string(source,separators):
... return re.split('|'.join(re.escape(x) for x in separators),source)
...
>>> split_string("the;foo: went to the store",':;')
['the', 'foo', ' went to the store']
>>> split_string("the;foo: went to the store",['foo','st'])
['the;', ': went to the ', 'ore']
または、最後に、セパレーターの連続した実行でも分割したい場合は、次のようにします。
def split_string(source,separators):
return re.split('(?:'+'|'.join(re.escape(x) for x in separators)+')+',source)
与える:
>>> split_string("Before the rain ... there was lightning and thunder.", " .")
['Before', 'the', 'rain', 'there', 'was', 'lightning', 'and', 'thunder', '']