分隔符上的拆分不能提供准确的输出

时间:2014-03-08 21:17:04

标签: python python-3.x split

def split_on_separators(word, separators):

    """
    Return a list of non-empty, non-blank strings from the original string
    determined by splitting the string on any of the separators.
    separators is a string of single-character separators.

    >>> split_on_separators("Wow! Fantastic, you're done.", "!,")
    ['Wow', ' Fantastic', " you're done."]
    """

    word_list = []

    for ch in word.split():
        stripped = ch.strip(separators)
        word_list.append(stripped)

    return word_list 




#output
['Wow', 'Fantastic', "you're", 'done.']

分离器被移除但我似乎无法获得F前面的空白区域。其次'你已经完成了。'不是单个字符串

任何帮助将不胜感激:) 我正在使用python 3

4 个答案:

答案 0 :(得分:2)

一种解决方案可能是:

def split_on_separators(word, separators):

    word_list = [word]
    auxList = []

    for sep in separators:
        for w in word_list:
            auxList.extend(w.split(sep))
        word_list = auxList
        auxList = list()
    return word_list
  

Out [76]:['哇','太棒了',“你已经完成了。”]

答案 1 :(得分:1)

这应该做的工作:

def split_on_separators(word, separators):
    for sep in separators:
        word = word.replace(sep, '^#^')
    return [x.strip() for x in word.split('^#^')]

^#^只是一个占位符。我把它变成了一个奇怪的角色组合,以确保它不会出现在正常的句子中。如果需要,可以替换它。

答案 2 :(得分:1)

另一个疯狂的解决方案:

import itertools
def split_on_separators(word, separators):
    groups = itertools.groupby(word, lambda char: char in separators)
    return [''.join(letters) for is_sep, letters in groups if not is_sep]

对于两个分隔符可以相邻的情况(并且您希望将其表示为空单词):

import itertools
def split_on_separators(word, separators):
    groups = itertools.groupby(word, lambda char: char in separators)
    seps2words = lambda letters: [''] * (len(tuple(letters)) - 1)
    return [word for is_sep, letters in groups
            for word in ([''.join(letters)] if not is_sep else seps2words(letters))]

答案 3 :(得分:0)

你在剥离它之前就分裂了。拆分是基于单词之间的空白进行的;因此,你不会在最终输出中看到它。这也是“你完成”不是单个字符串的原因。它根据单词之间的空格分割它。

您可以尝试分割分隔符:

  

str.split([sep [,maxsplit]])返回字符串中的单词列表,   使用sep作为分隔符字符串。