所以我是Python新手。我想知道我怎么能拿出像
这样的东西"James-Dean-Winchester"
或
"James:Dean:Winchester"
或只是
"James Dean Winchester"
让python能够看到哪种格式,根据格式拆分输入,然后将其存储在稍后要修改的变量中。我可以以某种方式将分裂字符(“:”,“ - ”,“”)存储在一个数组中,然后在我希望拆分的文本上调用数组,或者有更简单的方法吗?
更新:我应该补充说,只会有一种类型的分隔符。
答案 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_list
将result
与zip
相关联,即按顺序迭代每个列表中的索引。
您可以使用分隔符分隔字符串,例如'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]的分隔符。