提取具有多个分隔符的文本
Posted
技术标签:
【中文标题】提取具有多个分隔符的文本【英文标题】:Extract text with multiple separators 【发布时间】:2017-06-25 20:27:25 【问题描述】:我有带有分隔符 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']]
我怎样才能得到想要的输出?
【问题讨论】:
【参考方案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]
:)
我想如果你的A
和B
总是用空格括起来,你最好使用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]
【讨论】:
以上是关于提取具有多个分隔符的文本的主要内容,如果未能解决你的问题,请参考以下文章