Ответ 1
Вы можете использовать re.split
, чтобы разбить свои строки на 'A'
или 'B'
:
>>> L1 = [re.split(r'[AB] *', inputtext)[-1] for inputtext in L]
>>> L1
['aaa', 'ffff', 'eeee', 'rrr']
У меня есть список строк с разделителями 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']]
Как получить желаемый результат?
Вы можете использовать re.split
, чтобы разбить свои строки на 'A'
или 'B'
:
>>> L1 = [re.split(r'[AB] *', inputtext)[-1] for inputtext in L]
>>> L1
['aaa', 'ffff', 'eeee', 'rrr']
Альтернативное предложение без regex
.
[[i] for i in ' '.join(L).split(' ') if i.count(i[0]) == len(i) and len(i) > 1]
Результат
[['aaa'], ['ffff'], ['eeee'], ['rrr']]
Вы можете использовать тот факт, что split
возвращает список, даже если он не находит разделитель.
L1 = [[x.split(' A ')[-1].split(' B ')[-1]] for x in L]
Если вы хотите, чтобы это работало более чем с 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']
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