【问题标题】:Regex to match lines in-between two specific lines, in Python正则表达式匹配两个特定行之间的行,在 Python
【发布时间】:2011-07-29 02:49:29
【问题描述】:

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

示例文件内容:

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

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

this will be blog post content.

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

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

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

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

【问题讨论】:

    标签: python regex newline


    【解决方案1】:

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

    【讨论】:

    • 这很糟糕,因为它将匹配单行 --- title: a title layout: page --- here's some text ================,并且 OP 表示多行。
    • @smci 不一定。这取决于OP需要什么。这匹配多行。
    • 我知道它匹配多行,我说的是它也不必要地匹配单行,这不是 OP 所要求的。而 Porges 建议的 (\r\n|\r|\n) 更安全。使用\s+ 作为总称太松散了。
    • @smci 我的意思是,也许 OP 不在乎它是否太松散?也许它也匹配一行是可以的。 OP没有指定它不应该,那么你怎么知道它是不需要的?此外,输入似乎采用明确定义的格式,并非每个人都有这种形式。因此,换句话说,您的建议超出了规范的范围。过度设计。 ;-)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多