разбить строку на несколько разных символов - PullRequest
11 голосов
/ 17 декабря 2008

Я хотел бы разбить строку, используя один или несколько символов-разделителей.

например. "b.c", разделенный на "" и "." выдаст список ["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 ]

38 голосов
/ 17 декабря 2008
>>> import re
>>> re.split('[ .]', 'a b.c')
['a', 'b', 'c']
2 голосов
/ 06 октября 2013

Раствор без ре:

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

2 голосов
/ 17 декабря 2008

Этот заменяет все разделители на первый разделитель в списке, а затем "разделяет", используя этот символ.

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']

Мне действительно нравится это 're' решение.

1 голос
/ 16 июня 2009

Не очень быстро, но делает работу:

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