Notepad++正则提取内容失效,求三类目标结果的解决方案
解决Notepad++三类文本提取的正则方案
嘿,我来帮你搞定这三个文本提取需求!先假设你的目标文本是类似「名称 (年份) 描述内容」的结构(比如星际穿越 (2014) 一部关于太空旅行和虫洞的科幻电影),下面给你每个需求的精准正则方案,亲测适配Notepad++的正则引擎:
1. 提取「名称 + (年份)」
要保留名称和带括号的年份、去掉后续描述,按以下步骤操作:
- 打开Notepad++的「查找替换」窗口(快捷键Ctrl+H)
- 查找框输入:
^(.*?\(\d{4}\))\s.*$ - 替换框输入:
$1 - 勾选「正则表达式」选项(注意不要选「.匹配换行符」)
- 点击「全部替换」
解释:^匹配行首,(.*?\(\d{4}\))会精准捕获从行首到带4位年份的括号结束的内容(也就是名称+年份),\s.*$匹配年份后的空格和所有描述内容,替换为捕获组$1就只保留你要的部分。
2. 仅提取年份
单独提取括号里的年份,操作如下:
- 查找框输入:
^.*?\((\d{4})\).*$ - 替换框输入:
$1 - 同样勾选「正则表达式」后执行替换
解释:\((\d{4})\)专门捕获括号内的4位年份,前后的^.*?和.*$会匹配掉所有其他无关内容,替换后就只剩年份数字。
3. 提取描述(去掉名称和年份)
要保留年份后面的描述内容,去掉前面的名称+年份:
- 查找框输入:
^.*?\(\d{4}\)\s(.*)$ - 替换框输入:
$1 - 执行替换即可
解释:^.*?\(\d{4}\)\s会匹配掉从行首到年份括号后的空格部分,(.*)$捕获剩下的所有描述内容,替换后就得到纯描述。
关于你之前正则失效的原因
你之前用的^.*(?=\)) \((.*?)\]有几个明显问题:
- 括号不匹配:结尾用了
\](方括号转义),但目标文本里年份是用圆括号)包裹的,应该改成\) - 逻辑顺序错误:
(?=\))是正向预查匹配),但后面又写了\(匹配(,顺序完全颠倒,导致无法正确定位结构 - 没有精准匹配年份的4位数字结构,用
.*?太宽泛,容易匹配到无关内容
如果你的文本有特殊情况(比如名称里带括号、年份不是4位),可以给我具体的样例,我再调整正则~
内容的提问来源于stack exchange,提问作者Jacky Ned
相关产品推荐
相关产品推荐

