1

有没有办法简化这个功能?具体来说,我想用更少的缩进行来重写它。

# split string (first argument) at location of separators (second argument, should be a string)
def split_string(text, separators):
    text = ' ' + text + ' '
    words = []
    word = ""
    for char in text:
        if char not in separators:
            word += char
        else:
            if word:
                words.append(word)
            word = ""
    if not words:
        words.append(text)
    return words
4

4 回答 4

6

尝试使用re.split,例如:

re.split('[%s]' % (separators),string)

创建一个正[]则表达式字符类进行拆分。

于 2013-04-25T21:05:07.407 回答
4

你的代码似乎产生

>>> split_string("foo.,.bar", ".,")
[' foo']

但你的评论说

split_string("foo.,.bar", ".,") will return ["foo", "bar"]

假设评论是预期的,那么我会使用itertools.groupby(我讨厌使用正则表达式):

from itertools import groupby

def splitter(text, separators):
    grouped = groupby(text, lambda c: c in separators)
    return [''.join(g) for k,g in grouped if not k]

这使

>>> splitter("foo.,.bar", ".,")
['foo', 'bar']

groupby返回由某个函数(在本例中为)分组的连续术语的迭代器lambda c: c in separators

于 2013-04-25T21:19:48.997 回答
1

您应该使用该split()方法。取自官方文档:

str.split([sep[, maxsplit]])

返回字符串中单词的列表,使用 sep 作为分隔符字符串。如果给定 maxsplit,则最多完成 maxsplit 拆分(因此,列表将最多具有 maxsplit+1 个元素)。如果未指定 maxsplit 或 -1,则对拆分的数量没有限制(进行所有可能的拆分)。

如果给出 sep,则连续的分隔符不会组合在一起,并被视为分隔空字符串(例如,'1,,2'.split(',') 返回 ['1', '', '2'])。sep 参数可以由多个字符组成(例如,'1<>2<>3'.split('<>') 返回 ['1', '2', '3'])。使用指定的分隔符拆分空字符串会返回 ['']。

如果 sep 未指定或为 None,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随空格,则结果将在开头或结尾不包含空字符串。因此,使用 None 分隔符拆分空字符串或仅包含空格的字符串将返回 []。

例如,'1 2 3'.split() 返回 ['1', '2', '3'],而 '1 2 3'.split(None, 1) 返回 ['1', '2 3' ]。

于 2013-04-25T21:07:34.867 回答
1

你可以做:

myString = "Some-text-here"
splitWords = myString.split("-")

上面的代码将返回一个分隔单词的列表。我使用“-”作为分隔符,你可以指定任何你喜欢的分隔符。默认是这样的“空格”分隔符:

myString = "Some text here"
splitWords = myString.split()
于 2013-04-25T21:11:47.017 回答