在许多不同的字符上拆分字符串

时间:2008-12-17 02:06:01

标签: python string split

我想使用一个或多个分隔符来分割字符串。

E.g。 “a b.c”,分为“”和“。”会给出列表[“a”,“b”,“c”]。

目前,标准库中没有任何内容可以看到这一点,我自己的尝试有点笨拙。 E.g。

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 个答案:

答案 0 :(得分:38)

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

答案 1 :(得分: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']

我确实喜欢那种“解决方案”。

答案 2 :(得分:2)

无需重新解决方案:

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

答案 3 :(得分:1)

不是很快但完成工作:

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