对开始和结束于特定 format/word 的重复部分进行分组

Grouping a repetitive section starting and end on a specific format/word

我正在尝试捕获以特定单词 Case 开始并以格式为 dd.mm.yyyydd.m.dddd

的日期结束的多行字符串

示例文本如下:

案例No.X.1 我知道我是幸运儿(1)a sda asddasd (ii) sa asdas asd aklk 铁路,飞机 asd-(一二三四)。 截止日期......... 29.8.1818

案例No.X.1 我知道我是幸运儿(1)a sda asddasd (ii) sa asdas asd aklk 铁路,飞机 asd-(一二三四)。 截止日期......... 29.8.1818

案例No.X.1 我知道我是幸运儿(1)a sda asddasd (ii) sa asdas asd aklk 铁路,飞机 asd-(一二三四)。 截止日期......... 29.8.1818

案例No.X.1 我知道我是幸运儿(1)a sda asddasd (ii) sa asdas asd aklk 铁路,飞机 asd-(一二三四)。 截止日期......... 29.8.1818

我正在尝试这个:

标志: g m i

^case[^]*\d{1,2}\.\d{1,2}\.\d{2,4}
^case[\s\S]*\d{1,2}\.\d{1,2}\.\d{2,4}
((^case)[\s\S]+(\d{1,2}\.\d{1,2}\.\d{2,4}))

注意:已设置不区分大小写的标志

我希望得到每个段落的分组 (case - date)

这些表达式捕获了第一个 case 到最后 date

的唯一一组

案例 No.X.1 我知道我是个幸运儿 (1) a sda asddasd (ii) sa asdas asd aklk 铁路,飞机 asd - (one二三四)。截止日期.........29.8.1818

案例No.X.1 我知道我是个幸运儿 (1) a sda asddasd (ii) sa asdas asd aklk Railway, Airplane asd - (一二三四).截止日期.........29.8.1818

案例No.X.1 我知道我是个幸运儿 (1) a sda asddasd (ii) sa asdas asd aklk Railway, Airplane asd - (一二三四).截止日期.........29.8.1818

案例No.X.1 我知道我是个幸运儿 (1) a sda asddasd (ii) sa asdas asd aklk Railway, Airplane asd - (一二三四).截止日期.........29.8.1818

我正在调查换行符和环顾四周。

使用flags=re.DOTALL|re.M (regex101):

data = '''Case No.X.1 I know I am a lucky boy (1) a sda asddasd (ii)
sa asdas asd aklk Railway, Airplane asd - (one two three four). Closing date ......... 29.8.1818

Case No.X.2 I know I am a lucky boy (1) a sda asddasd (ii)
sa asdas asd aklk Railway, Airplane asd - (one two three four). Closing date ......... 29.8.1818

Case No.X.3 I know I am a lucky boy (1) a sda asddasd (ii)
sa asdas asd aklk Railway, Airplane asd - (one two three four). Closing date ......... 29.8.1818

Case No.X.4 I know I am a lucky boy (1) a sda asddasd (ii)
sa asdas asd aklk Railway, Airplane asd - (one two three four). Closing date ......... 29.8.1818'''

import re

for m in re.findall(r'^Case.*?\d{1,2}\.\d{1,2}\.\d{2,4}$', data, flags=re.DOTALL|re.M):
    print(m)
    print('-' * 160)

打印:

Case No.X.1 I know I am a lucky boy (1) a sda asddasd (ii)
sa asdas asd aklk Railway, Airplane asd - (one two three four). Closing date ......... 29.8.1818
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Case No.X.2 I know I am a lucky boy (1) a sda asddasd (ii)
sa asdas asd aklk Railway, Airplane asd - (one two three four). Closing date ......... 29.8.1818
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Case No.X.3 I know I am a lucky boy (1) a sda asddasd (ii)
sa asdas asd aklk Railway, Airplane asd - (one two three four). Closing date ......... 29.8.1818
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Case No.X.4 I know I am a lucky boy (1) a sda asddasd (ii)
sa asdas asd aklk Railway, Airplane asd - (one two three four). Closing date ......... 29.8.1818
----------------------------------------------------------------------------------------------------------------------------------------------------------------