You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式问题:提取文档中最后一个“——”后的所有行并统计行数

正则表达式问题:提取文档中最后一个“——”后的所有行并统计行数

你已经找对了方向——能匹配到最后一个“——”就成功了一半!其实只需要在这个基础上延伸一下,就能捕获到后面的所有内容,进而统计行数。我给你两种实用的方案,适配不同的正则引擎场景:

方案1:使用\K直接获取目标内容(支持PCRE、PHP、Python 3.10+等)

这个写法和你之前尝试的(?s:.*\s)\K——思路一致,只是把后续内容也纳入匹配:

(?s).*——\s*\K.*

正则各部分解释:

  • (?s):开启单行模式,让.可以匹配换行符,这样.*能跨多行找到最后一个“——”(贪婪模式会自动优先匹配到最末尾的分隔符)
  • .*——:贪婪匹配从文档开头到最后一个“——”的所有内容
  • \s*:匹配“——”后面的任意空白(包括换行、空格),避免开头空行干扰结果
  • \K:重置匹配起点,把前面匹配到的内容“丢弃”,只保留后面的部分
  • .*:匹配“——”之后的所有剩余内容

如果只想精准匹配1 nuit格式的行(排除可能的其他内容),可以把最后一个.*换成(?:1 nuit\s*)+:

(?s).*——\s*\K(?:1 nuit\s*)+

方案2:用捕获组兼容更多引擎(比如Python旧版本、JavaScript)

如果你的正则引擎不支持\K,可以用捕获组来提取目标内容:

(?s).*——\s*(.*)

这里的捕获组(.*)会直接拿到“——”之后的所有内容,后续从捕获组中提取即可。

统计行数的方法

拿到目标内容后,统计行数很简单:

  • 方法1:把内容按换行符分割,过滤掉空行后计数
  • 方法2:直接用正则匹配每一行的标识(比如1),统计匹配次数

举个Python的示例代码:

import re

# 你的原始文本
text = """TITLE
——
1 nuit 
1 nuit 
1 nuit 
1 nuit 
1 nuit 
total : 5 nuits 
——
1 nuit 
1 nuit
1 nuit
total : 3 nuits 
——
1 nuit 
1 nuit
1 nuit
1 nuit
1 nuit
1 nuit
"""

# 用方案1匹配内容
pattern = r'(?s).*——\s*\K.*'
match_result = re.search(pattern, text)

if match_result:
    target_content = match_result.group()
    # 过滤空行后统计行数
    valid_lines = [line for line in target_content.split('\n') if line.strip()]
    print(f"统计到的行数:{len(valid_lines)}")
    print("\n捕获到的内容:")
    print(target_content)

运行后会输出行数6,以及你预期的那6行内容。

如果只想统计1 nuit的数量,也可以直接用re.findall:

count = len(re.findall(r'(?s).*——\s*\K1', text))
print(f"统计到的行数:{count}")

结果同样是6。

备注:内容来源于stack exchange,提问作者Aurore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 12:50:30