使用多个分隔符提取文本

18

我有一串带有分隔符AB的字符串列表:

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

如何获得所期望的输出结果?

5个回答

21

你可以使用re.split函数,在'A'或者'B'处将字符串分割:

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

1
我靠,我写了这个代码 LL = [re.split("[AB]",x)[-1].strip() for x in L] :) - Jean-François Fabre
5
我认为如果你的字符串中 AB 始终被空格包围,最好使用 r' +[AB] +'(或 `r'\s+[AB]\s+')来匹配。 - Wiktor Stribiżew

6

没有使用正则表达式的替代建议。

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

结果

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

6
你可以利用split即使没有找到分隔符也返回列表的这个特性。
 L1 = [[x.split(' A ')[-1].split(' B ')[-1]] for x in L]

2
如果您希望此功能适用于除 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']

1
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接