基于多个分隔符在列表中拆分值

时间:2019-04-25 11:17:33

标签: python python-3.x loops for-loop split

我在列表中有一个字符串。我想基于我的分隔符拆分值。我不想使用任何正则表达式。 regex只需一次操作即可执行。但我想使用循环和split()函数来实现它。如何使其成为可能。 这是我的代码:

aa = ['prinec-how,are_you&&smile#isfine1']

separator = ["-",",","_","&","#"]
l1 = []

for sep in separator:
    for i in aa:
        #print("i:",i)
        split_list = i.split(sep)
        aa = split_list
        print("aa:",aa)
        #print("split_list:",split_list)
    l1 =l1 + split_list
print(l1)

必填输出:

['prinec','how','are','you','smile','isfine1']

3 个答案:

答案 0 :(得分:4)

使用str.replacestr.split()

例如:

aa = ['prinec-how,are_you&&smile#isfine1']
separator = ["-",",","_","&","#"]

for i in aa:
    for sep in separator:
        i = i.replace(sep, " ")
    print(i.split())

输出:

['prinec', 'how', 'are', 'you', 'smile', 'isfine1']

答案 1 :(得分:2)

使用正则表达式(这里将 做为明智的选择)的想法,例如使用itertools.groupby根据字符是否为分隔符对字符进行分组,然后保留不包含字符的组。

aa = ['prinec-how,are_you&&smile#isfine1']
separator = ["-",",","_","&","#"]

from itertools import groupby
res = [''.join(g) for k, g in groupby(aa[0], key=separator.__contains__) if not k]
# res: ['prinec', 'how', 'are', 'you', 'smile', 'isfine1']

据我所知,您希望通过不同的分隔符迭代地拆分列表中的字符串,并将其部分重新添加到列表中。这样,aa成为最初包含单个字符串的列表也很有意义。通过列表理解,您可以更轻松地完成此操作,将aa替换为一个新列表,其中包含来自上一个aa的单词和下一个分隔符的

aa = ['prinec-how,are_you&&smile#isfine1']
separator = ["-",",","_","&","#"]

for s in separator:
     aa = [x for a in aa for x in a.split(s) if x]
# aa: ['prinec', 'how', 'are', 'you', 'smile', 'isfine1']

答案 2 :(得分:1)

使用regex

import re
a=re.compile(r'[^-,_&#]+')

ST = 'prinec-how,are_you&&smile#isfine1'
b=a.findall(ST)
print(b)
"""
output

['prinec', 'how', 'are', 'you', 'smile', 'isfine1']

"""

用于循环

aa = ['prinec-how,are_you&&smile#isfine1','prinec-how,are_you&&smile#isfi-ne1']

separator = ["-",",","_","&","#"]

for i in range(len(aa)):
    j =aa[i]
    for sep in separator:
        j = j.replace(sep, ' ')
    aa[i]=j.split()

print(aa)    

输出

   [['prinec', 'how', 'are', 'you', 'smile', 'isfine1'], ['prinec', 'how', 'are', 'you', 'smile', 'isfi', 'ne1']]