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

Notepad++正则表达式需求:标记首行以数字开头且次行为日期的连续两行

问题:用Notepad++正则匹配特定连续两行

目标文本

hrthrhthrht
bntyjhytjtyj
8,083,344
Mar1996
tggrgge

需求

需要匹配上述文本中的连续两行,满足两个条件:

  • 第一行必须以数字开头
  • 第二行仅包含英文月份缩写+4位数字年份的日期(格式示例:Mar1996,正则规则为\b(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4}\b)

用户尝试的无效正则

以下是尝试过但未生效的正则表达式:

^[^\d\r\n]*(?:\D*(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4})[^\d\r\n]*$

^[^\d\r\n]*(?:\D*(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4})[^\d\r\n]*\R[^\d\r\n]*(?:\D*(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4})[^\d\r\n]*$

^[^\d\r\n]*(?:\D*(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4})[^\d\r\n]*\R[^\d\r\n]*(?:\D*(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4})[^\d\r\n]*$

^[^\d\r\n].*\R\b(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4}\b.*$

^[^\d\r\n].*\R^[^\d\r\n].*\b(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4}\b.*$

^[^\d\r\n].*\R[^\d\r\n].*\b(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4}\b.*$

^[^\d\r\n].*\R^[^\d\r\n].*\b(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4}\b

^[^\d\r\n].*\R[^\d\r\n].*(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4}\b

问题分析

这些正则失效的核心原因:

  1. 首行条件完全写反:所有正则里的^[^\d\r\n]是匹配不以数字开头的行,和需求里「首行必须以数字开头」完全相反。
  2. 第二行匹配逻辑错误:部分正则中的[^\d\r\n].*会允许第二行包含日期以外的多余字符,而需求要求第二行仅能有指定格式的日期。
  3. 行首尾限定不当:要么没有用$限定第二行的结尾,要么重复使用^导致换行后的匹配逻辑混乱。

正确的正则表达式

在Notepad++中,切换到「正则表达式」模式(注意不要勾选「.匹配换行符」选项),使用以下正则即可精准匹配目标连续两行:

^\d.*\R^\b(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4}\b$

正则细节解释

  • ^\d.*:匹配以数字开头的整行(^定位行首,\d匹配开头的数字,.*匹配该行剩余所有内容)
  • \R:匹配任意类型的换行符(兼容Windows的\r\n和其他系统的换行格式)
  • ^\b(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4}\b$:匹配仅包含指定日期的行(^和$限定行首行尾,确保整行没有多余内容;\b是单词边界,避免匹配类似Mar1996abc这种带后缀的无效内容)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:53:23