разделить значения в списке на основе нескольких разделителей Python - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть строка в списке.Я хочу разделить значения на основе моего разделителя.Я не хочу использовать выражения регулярных выражений.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 ]

4 голосов
/ 25 апреля 2019

Использование str.replace и str.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']
2 голосов
/ 25 апреля 2019

Вместо использования регулярного выражения (которое будет разумным делом здесь), вы можете, например, используйте 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']
1 голос
/ 25 апреля 2019

с использованием 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']] 
...