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

Python使用Regex正则提取文本中Annex后跟随的所有数字编号

问题原因

原代码无法提取全部编号,核心是两个错误:

  • 用了re.search()方法,该方法只会返回整个字符串里第一个符合规则的匹配项,天然不会返回后续结果。
  • 正则规则本身存在逻辑错误:字符集[]内的+、.都会被识别为普通字符,既无法匹配1.0.1这类三段式的点分编号,也无法处理and连接的末尾编号,匹配到第一个逗号位置就会终止。
解决方案

不需要写复杂的长正则,分两步提取即可,兼容性更强,支持任意段数的点分编号、逗号/and混合分隔的场景:

  1. 先定位到每个Annex关键词后、后续普通英文内容之前的完整编号列表片段
  2. 从该片段中提取所有符合点分数字格式的内容,就是目标编号

完整可运行代码:

import re

text = """Refer to Annex 1.1, 1.2 and 2.0 containing information etc,

or

Refer to Annex 1.0.1, 1.1.1 containing information etc,
"""

# 遍历所有Annex对应的编号段
for segment_match in re.finditer(r'Annex\s+(.*?)(?=\s[a-zA-Z])', text):
    # 提取段内所有点分数字编号
    annex_numbers = re.findall(r'\d+(?:\.\d+)+', segment_match.group(1))
    print(annex_numbers)

运行输出:

['1.1', '1.2', '2.0']
['1.0.1', '1.1.1']

规则说明

  • 第一段正则r'Annex\s+(.*?)(?=\s[a-zA-Z])':匹配Annex关键词后,跳过空格,非贪婪匹配所有内容,直到遇到前面带空格的英文字母(也就是containing这类非编号的正文内容)停止,精准截取出编号列表的完整片段。
  • 第二段正则r'\d+(?:\.\d+)+':专门匹配点分格式的数字串,不管是2段、3段还是更多段的编号都能正确识别,不受逗号、and这类分隔符的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:36:27