正则表达式匹配两个特定行之间的行,在Python中

时间:2011-07-29 02:49:29

标签: python regex newline

我正在尝试使用正则表达式从文件中读取的文本中解析出一些行。我知道这可以通过逐行读取文件来完成,但我喜欢在单个正则表达式匹配中捕获所有相关信息的优雅。

示例文件内容:

---
title: a title
layout: page
---

here's some text
================

this will be blog post content.

我正在尝试生成一个将返回2组的正则表达式匹配:“---”行之间的数据和第2个“---”行之后的所有数据。这是我提出的正则表达式字符串,我遇到了问题:

re.match('---\n(.*?)\n---\n(.*)', content, re.S)

这似乎运行良好,除了处理unix vs windows line-endings时。有没有办法让这个正则表达式匹配\ r \ n如果它也存在?它适用于unix,我相信它只是\n

另外,如果你认为这个正则表达式可以改进,我愿意接受建议。

2 个答案:

答案 0 :(得分:4)

行标记的结尾被视为空格,因此您可以使用构造\s+来匹配与平台无关的行尾(和其他空格)。

答案 1 :(得分:3)

序列(\r\n|\r|\n)将匹配所有“正常”行结尾(分别为Windows,旧Mac和* nix)。