我有一个以下格式的python字符串
string = 'Some text.\n1. first item\n2. second item\n3. third item\nSome more text.'
我想要匹配的是子串\n1. first item\n2. second item\n3. third item
,实际上是字符串中的枚举列表。出于我的目的,我不必须匹配第一个\n
。
到目前为止我已尝试过:
re.findall('\n.*\d\..*', req, re.DOTALL)
re.findall('\n.*\d\..*?', req, re.DOTALL)
第一个案例找到了我不想要的文本的最后一行,第二个案例找不到第3行的其余部分。我面临的主要困难是我不知道如何制作第一个.*
贪婪(并匹配换行符),但让第二个.*
简单地匹配换行符。
注意:枚举字符串中的项目数是未知的,因此我无法匹配三个编号的行。它可以是任意数量的行。提供的字符串只是一个恰好有三个枚举项的例子。
答案 0 :(得分:1)
如何使用逐行匹配和过滤器?
string = 'Some text.\n1. first item\n2. second item\n3. third item\nSome more text.'
is_enumerated = re.compile(r"^\d+\.\s")
matches = list(filter(lambda line: is_enumerated.match(line), string.splitlines()))
# ['1. first item', '2. second item', '3. third item']
如果需要,您可以将匹配项加入\n
。