11

1つ以上の区切り文字を使用して文字列を分割したいのですが。

たとえば、「a bc」、「」と「」で分割します。リスト["a"、 "b"、"c"]を提供します。

現時点では、これを行うための標準ライブラリには何も表示されません。私自身の試みは少し不器用です。例えば

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", [' ', '.'])

最悪!より良い提案はありますか?

4

4 に答える 4

38
>>> import re
>>> re.split('[ .]', 'a b.c')
['a', 'b', 'c']
于 2008-12-17T02:16:43.560 に答える
2

これは、すべての区切り文字をリストの最初の区切り文字に置き換えてから、その文字を使用して「分割」します。

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

出力:

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

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

しかし、私はその「再」ソリューションが好きです。

于 2008-12-17T03:31:13.600 に答える
2

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]

説明はこちらhttps://stackoverflow.com/a/19211729/2468006

于 2013-10-06T17:41:01.830 に答える
1

それほど高速ではありませんが、仕事をします:

def my_split(text, seps):
  for sep in seps:
    text = text.replace(sep, seps[0])
  return text.split(seps[0])
于 2009-06-16T10:09:29.883 に答える