Python正则表达式匹配枚举列表

时间:2017-06-16 17:28:55

标签: regex python-3.x

我有一个以下格式的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行的其余部分。我面临的主要困难是我不知道如何制作第一个.*贪婪(并匹配换行符),但让第二个.*简单地匹配换行符。

注意:枚举字符串中的项目数是未知的,因此我无法匹配三个编号的行。它可以是任意数量的行。提供的字符串只是一个恰好有三个枚举项的例子。

1 个答案:

答案 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