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

Markdown活动追踪文件正则匹配问题:生成每日及时间报告

修正正则匹配,精准提取项目标题与活动块

我来帮你搞定这个正则匹配的问题!先梳理下核心需求:你需要从MASTERFILE里精准提取两类内容——项目标题行(格式为## %XXX ProjectName1)和从CHRG=起始到<br>结束的活动内容块,之前匹配出无关内容,大概率是因为贪婪匹配、边界未限定或模式设置不对,下面给出针对性的正则方案:

1. 匹配项目标题行

要确保只匹配整行的项目标题(避免匹配到文本中类似格式的子串),用多行模式的正则:

^## %(\S+) (.+)$

正则解释:

  • ^:匹配行开头(需启用多行模式m,让^/$对应每行首尾)
  • ## %:固定前缀,严格匹配项目标题的开头格式
  • (\S+):捕获项目标识(比如XXX,\S+匹配非空白字符,适配字母/数字/符号组合的标识)
  • (.+):捕获项目名称(匹配标题剩余的所有内容,直到行尾)
  • $:匹配行结尾

2. 匹配CHRG=到<br>的活动块

如果活动块可能跨行(比如CHRG=在一行,<br>在后续行),需要启用**单行模式s**让.匹配换行符,同时用非贪婪匹配避免过度抓取:

(?s)CHRG=.+?<br>

正则解释:

  • (?s):开启单行模式,使.能匹配换行符(处理跨行的活动块)
  • CHRG=:固定起始标识,精准定位活动块开头
  • .+?:非贪婪匹配任意字符(直到遇到第一个<br>就停止,避免抓取多个活动块的内容)
  • <br>:固定结束标识,匹配活动块的结尾

3. 关联项目标题与对应活动块(进阶)

如果MASTERFILE的结构是「项目标题 + 该项目的活动块」,可以用组合正则一次性提取项目及其对应的所有活动内容:

^## %(\S+) (.+)\n(?s)(.*?(CHRG=.+?<br>)+)

正则解释:

  • 前半部分^## %(\S+) (.+)\n:匹配并捕获项目标题行
  • (?s):开启单行模式处理跨行内容
  • (.*?(CHRG=.+?<br>)+):捕获该项目下所有连续的活动块(.*?跳过标题后到第一个活动块前的无关文本,(CHRG=.+?<br>)+匹配一个或多个活动块)

常见问题修正(为什么之前会匹配无关内容?)

  • 未启用多行模式:导致^/$匹配整个文件的首尾,而非每行首尾,会误抓包含## %的长文本行
  • 使用贪婪匹配.+而非非贪婪.+?:会从第一个CHRG=一直匹配到文件最后一个<br>,把多个项目的活动块甚至无关内容都包含进来
  • 未开启单行模式:如果活动块跨行,.无法匹配换行符,会只抓取CHRG=所在行的内容,或者匹配失败

示例验证

假设MASTERFILE内容如下:

## %PRJ001 Website Redesign
项目前期准备:需求梳理
CHRG=2024-05-20, 4h, Frontend Development<br>
CHRG=2024-05-20, 2h, Backend Integration<br>
无关的备注文本

## %PRJ002 Mobile App Launch
CHRG=2024-05-20, 3h, UI Testing<br>
临时会议记录(不属于活动块)

用上述正则提取后,会得到:

  • 项目标题:## %PRJ001 Website Redesign、## %PRJ002 Mobile App Launch
  • 对应活动块:
    • PRJ001下的CHRG=2024-05-20, 4h, Frontend Development<br>、CHRG=2024-05-20, 2h, Backend Integration<br>
    • PRJ002下的CHRG=2024-05-20, 3h, UI Testing<br>

完全不会包含“无关的备注文本”“临时会议记录”这类无关内容。

内容的提问来源于stack exchange,提问作者projetnumero9

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:11:47