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

如何编写正则表达式捕获以三位数字行分隔的所有文本块?

问题

现有一段文本解析出错,多个文本块被仅含三位数字的行分隔,需要编写正则表达式捕获每个文本块:

  • 文本块需起始并包含三位数字的行
  • 范围覆盖到下一个三位数字行前的最后一处空白

此前尝试的正则:

\n*((\d{3})\n*([\S\s]+?)(?=\s\d{3}\s))

但因使用前瞻断言,导致最后一个文本块无法被捕获。

示例原始文本:

foo
000

foo bar
foo

461

long
multiline
text

999

last example
until rest of document

预期捕获的文本块:

[000

foo bar
foo
] Group 1
[461

long
multiline
text
] Group 2
[999

last example
until rest of document] Group 3
解决方案

把前瞻断言改成匹配下一个三位数字行或者文本结束,就能覆盖最后一个文本块。修正后的正则:

(\d{3}[\s\S]+?)(?=\n\d{3}\n|\Z)

正则说明

  • \d{3}:匹配作为分隔符的三位数字行
  • [\s\S]+?:非贪婪匹配所有内容(含换行),避免过度匹配
  • (?=\n\d{3}\n|\Z):前瞻断言,匹配两种终止条件:
    1. \n\d{3}\n:下一个独立的三位数字行(前后换行确保是单独一行)
    2. \Z:文本的结束位置,覆盖最后一个没有后续分隔符的文本块

效果验证

用修正后的正则匹配示例文本,会精准捕获到三个预期的文本块,包括之前遗漏的最后一个块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:01:01