繁体   English   中英

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

[英]split values in list based on multiple separators python

我在列表中有一个字符串。 我想基于我的分隔符拆分值。 我不想使用任何正则表达式。 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']

使用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']

使用正则表达式(这是明智的,在这里做)的这一翻译,你可以如使用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']

使用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']

"""

使用for循环

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']] 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM