Подтвердить что ты не робот

Извлечение текста с несколькими разделителями

У меня есть список строк с разделителями A и B:

L = ['sgfgfqds A aaa','sderas B ffff','eeee','sdsdfd A rrr']

и нужно:

L1 = [['aaa'], ['ffff'], ['eeee'], ['rrr']] 

Я попытался использовать:

L1 = [re.findall(r'(?<=A)(.*)$', inputtext) for inputtext in L]
print (L1)

но он возвращает следующее:

[[' aaa'], [], [], [' rrr']] 

Как получить желаемый результат?

4b9b3361

Ответ 1

Вы можете использовать re.split, чтобы разбить свои строки на 'A' или 'B':

>>> L1 = [re.split(r'[AB] *', inputtext)[-1] for inputtext in L]
>>> L1
['aaa', 'ffff', 'eeee', 'rrr']

Ответ 2

Альтернативное предложение без regex.

[[i] for i in ' '.join(L).split(' ') if i.count(i[0]) == len(i) and len(i) > 1]

Результат

 [['aaa'], ['ffff'], ['eeee'], ['rrr']]

Ответ 3

Вы можете использовать тот факт, что split возвращает список, даже если он не находит разделитель.

 L1 = [[x.split(' A ')[-1].split(' B ')[-1]] for x in L]

Ответ 4

Если вы хотите, чтобы это работало более чем с A или B, вы могли бы использовать

>>> L = ['sgfgfqds A aaa','sderas B ffff','eeee','sdsdfd A rrr', 'lasjd X gggggg']
>>> L1 = [re.split(r'[A-Z] *', inputtext)[-1] for inputtext in L]
>>> print(L1)
['aaa', 'ffff', 'eeee', 'rrr', 'gggggg']

Ответ 5

for a in L:
   if 'A' in a or 'B' in a:
       clist = a.split()
       for c in clist:
           if c[::-1] == c:
               if c == 'A' or c == 'B':
                    pass
                else:
                  #print "c1",c
                   result.append([c])
            else:
                 pass
   else:
       result.append([a])

   print result