提取具有多个分隔符的文本

Posted

技术标签:

【中文标题】提取具有多个分隔符的文本【英文标题】:Extract text with multiple separators 【发布时间】:2017-06-25 20:27:25 【问题描述】:

我有带有分隔符 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']] 

我怎样才能得到想要的输出?

【问题讨论】:

【参考方案1】:

没有regex 的替代建议。

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

结果

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

【讨论】:

【参考方案2】:

您可以使用re.split'A''B' 上断开您的字符串:

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

【讨论】:

该死的我有LL = [re.split("[AB]",x)[-1].strip() for x in L] :) 我想如果你的AB总是用空格括起来,你最好使用r' +[AB] +'(或r'\s+[AB]\s+')。【参考方案3】:

如果您希望它不仅仅适用于 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']

【讨论】:

【参考方案4】:
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

【讨论】:

【参考方案5】:

你可以使用split返回一个列表,即使它没有找到分隔符。

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

【讨论】:

以上是关于提取具有多个分隔符的文本的主要内容,如果未能解决你的问题,请参考以下文章

shell中的cut和paste函数,可以从多个文本中提取特定的列

在excel单元格中的复杂分隔符之间提取文本

通过分隔符将列文本拆分为R中的多个不同列

如何在 LookML 中拆分具有多个分隔符的字符串?

读取具有不同列宽但在 R 中固定分隔符的文本文件

如何从具有由“|”分隔的字段的行中提取数据C++中的字符?