根据分隔符拆分输入并存储值

时间:2018-04-02 22:30:39

标签: python

所以我是Python新手。我想知道我怎么能拿出像

这样的东西
"James-Dean-Winchester"

"James:Dean:Winchester"

或只是

"James Dean Winchester"

让python能够看到哪种格式,根据格式拆分输入,然后将其存储在稍后要修改的变量中。我可以以某种方式将分裂字符(“:”,“ - ”,“”)存储在一个数组中,然后在我希望拆分的文本上调用数组,或者有更简单的方法吗?

更新:我应该补充说,只会有一种类型的分隔符。

2 个答案:

答案 0 :(得分:0)

如果您不知道每个字符串在哪个分隔符中,您需要为此编写一些逻辑。

一个建议是维护一个潜在分隔符列表(按首选项/流行度排序)并测试它们是否多次出现在您的字符串中。

以下是一个例子。

delimiters = list('-: ')

test_list = ['James-Dean-Winchester', 'April:May:June',
             'John Abraham Smith', 'Joe:Ambiguous-Connor']

def get_delimiter(x, delim):
    for sep in delim:
        if x.count(sep) > 1:
            return sep
    else:
        return None

result = [get_delimiter(i, delimiters) for i in test_list]

# ['-', ':', ' ', None]

然后,您可以通过test_listresultzip相关联,即按顺序迭代每个列表中的索引。

您可以使用分隔符分隔字符串,例如'mystr1-mystr2-mystr3'.split('-')

答案 1 :(得分:0)

你可以定义一个执行拆分的函数,除了分离的数组外还返回分隔符:

def multiSepSplit(string,separators=["-",":"," "]):
    return max([(string.split(sep),sep) for sep in separators],key=lambda s:len(s[0]))

multiSepSplit("James-Dean-Winchester")
# (['James', 'Dean', 'Winchester'], '-')

multiSepSplit("James Dean Winchester")
# (['James', 'Dean', 'Winchester'], ' ')

multiSepSplit("James:Dean:Winchester")
# (['James', 'Dean', 'Winchester'], ':')

它的工作原理是通过在分隔符上使用列表推导执行所有拆分,并在结果数组中使用具有最大元素数的那个。

列表中的每个条目实际上是一个元组,其结果是数组s [0]和使用s [1]的分隔符。