如何按 (a)、(b) 拆分文本?

How can I split a text by (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.']

您可以使用 positive lookahead ?= 在紧跟其后的部分拆分字符串,模式 (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))