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

如何编写正则表达式适配多种段落起始编号匹配场景?

问题与解决方案

需求概述

需要编写正则表达式,提取文本中多种格式的编号并转为[编号1]_ [编号2]的形式,覆盖以下场景:

  • 普通数字编号:例如「1) sovereign control will prevail」中的1
  • 层级带点编号:例如「1.1. These are the Rules」中的1.1、「5.47.1 "Пункт зупинки тролейбуса".」中的5.47.1
  • 多编号组合:例如「5.24.1 і 5.24.2 "Зміна напрямку руху на дорозі з розділювальною смугою"」中的5.24.1和5.24.2

原正则([0-9.,\-\s]+)\b")无法适配多编号场景。


正则实现方案

核心正则表达式

((?:\d+(?:\.\d+)*\s+(?:і|and|&)\s+)*\d+(?:\.\d+)*)(?=\s*")

规则拆解

  1. \d+(?:\.\d+)*:匹配单个合法编号,支持纯数字(1)或多层级带点格式(1.1、5.47.1)
  2. (?:\s+(?:і|and|&)\s+)*:匹配多编号之间的连接逻辑,支持乌克兰语「і」、英文「and」、符号「&」,前后允许任意空格,*表示可匹配0次或多次(兼容单/多编号场景)
  3. (?=\s*"):正向预查,确保编号后紧跟转义双引号",避免误匹配无关文本

后处理步骤

捕获到编号组合字符串后,将其中的连接符(「і」「and」「&」)替换为_ 即可得到目标格式:

  • 示例:捕获到5.24.1 і 5.24.2,替换后得到5.24.1_ 5.24.2
  • 单编号场景:捕获到1.1,直接保留即可

简化版(单独捕获每个编号)

如果需要单独提取每个编号,可使用:

(?:(\d+(?:\.\d+)*)\s+(?:і|and|&)\s+)*(\d+(?:\.\d+)*)(?=\s*")

此正则会将每个编号分别存入捕获分组,后续将分组内容用_ 拼接即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:18:12