首页 > 解决方案 > 如何按(a),(b)拆分文本?

问题描述

我想按子部分拆分我的文本(a),,(b)...

import re

s = "(a) First sentence. \n(b) Second sentence. \n(c) Third sentence."

l = re.compile('\(([a-f]+)').split(s)

使用我的正则表达式,我得到一个包含 7 个元素的列表:

['', 'a', ') First sentence. \n', 'b', ') Second sentence. \n', 'c', ') Third sentence.']

但我想要的是一个包含 3 个元素的列表,第一项应该是 (a) 与第一句,第二项 (b) 和第三项和最后一项 (c):

['(a) First sentence.', '(b) Second sentence.', '(c) Third sentence.']

标签: pythonregexre

解决方案


您可以使用正向前瞻 ?=将字符串拆分为紧随其后的部分,模式(letter_from_a_to_f_appears)

import re

s = "(a) Lorem ipsum dolor sit amet, consectetur adipiscing elit. \n(b) Nullam porta aliquet ornare. Integer non ullamcorper nibh. Curabitur eu maximus odio. Mauris egestas fermentum ligula non fermentum. Sed tincidunt dolor porta egestas consequat. Nullam pharetra fermentum venenatis. Maecenas at tempor sapien, eu gravida augue. Fusce nec elit sollicitudin est euismod placerat nec ut purus. \n(c) Phasellus fermentum enim ex. Suspendisse ac augue vitae magna convallis dapibus."
l = re.compile('(?=\([a-f]\))').split(s)

print(l)

输出:

['', '(a) Lorem ipsum dolor sit amet, consectetur adipiscing elit. \n', '(b) Nullam porta aliquet ornare. Integer non ullamcorper nibh. Curabitur eu maximus odio. Mauris egestas fermentum ligula non fermentum. Sed tincidunt dolor porta egestas consequat. Nullam pharetra fermentum venenatis. Maecenas at tempor sapien, eu gravida augue. Fusce nec elit sollicitudin est euismod placerat nec ut purus. \n', '(c) Phasellus fermentum enim ex. Suspendisse ac augue vitae magna convallis dapibus.']

如果您不想要空字符串,可以使用filter

l = list(filter(None, l))

如果您不希望每个字符串的尾随换行符,您可以使用map

l = list(map(str.strip, l))

或者

l = list(map(str.rstrip, l))

推荐阅读