【问题标题】:Python Regex - Capture match and previous two linesPython Regex - 捕获匹配和前两行
【发布时间】:2018-02-22 09:39:52
【问题描述】:

参考上一个问题 Python data extract from text file - script stops before expected data match

如何捕获匹配项和前两行? 我试过了,但得到:

位置 0(第 1 行,第 1 列)处的未终止子模式

output = re.findall('(.*\r\n{2}random data.',f.read(), re.DOTALL)

【问题讨论】:

  • 你想匹配什么?两行重复组,如line1\n line2\n line1\n line2\n?还是带有特定文本的行?

标签: regex python-3.x


【解决方案1】:

你可以使用

re.findall(r'(?:.*\r?\n){2}.*random data.*', s)

请注意,您不能使用 re.DOTALL.* 将匹配到输入的末尾,您只会得到最后一次出现。

Python demo

模式详情

  • (?:.*\r?\n){2} - 出现 2 次
    • .* - 除换行符以外的任何 0+ 个字符,尽可能多(一行)
    • \r?\n - 以行结尾(CRLFLF
  • .*random data.* - 包含random data 子字符串的行。

请参阅regex demo

【讨论】:

  • 什么是's'?给我: NameError: name 's' is not defined
  • 像你说的那样工作。
猜你喜欢
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 2021-06-05
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多