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

单步Python正则匹配含2个以上数字的温哥华格式参考文献括号

解决温哥华格式参考文献括号匹配问题

需求与示例

需求:使用单步Python正则表达式,匹配温哥华格式科技论文中**包含2个以上数字(区分数字与数位)**的参考文献组合括号。
示例输入文本:

blabla [23,24] bleble [23,24,28-30] blibli [40,45-48] bloblo [113]

期望匹配结果:

['[23,24,28-30]', '[40,45-48]']

错误正则分析

此前尝试的正则r"\[[,\-(?:\d+)]{3,}\]"无法满足需求,核心问题是:

  • 正则中的[,\-(?:\d+)]属于字符集,其中的(?:\d+)不会被当作分组解析,而是被拆分为(、?、:、\d、+这些单个字符,导致匹配逻辑完全偏离预期。

正确正则表达式

以下单步正则可精准实现需求:

r"\[(?:(?:\d+(?:-\d+)?,){2}\d+(?:-\d+)?|(?:\d+-\d+,\d+|\d+,\d+-\d+))\]"

正则逻辑说明

该正则通过两个分支覆盖所有符合条件的场景:

  1. 第一个分支(?:\d+(?:-\d+)?,){2}\d+(?:-\d+)?:匹配包含3个及以上参考文献条目的括号(每个条目可以是单个数字或数字范围),这类条目总数字数必然≥3。
  2. 第二个分支(?:\d+-\d+,\d+|\d+,\d+-\d+):匹配包含2个条目且其中至少一个是数字范围的括号,这类场景的总数字数为3(1个单个数字+2个范围数字)。

验证效果

在Python中测试:

import re
text = "blabla [23,24] bleble [23,24,28-30] blibli [40,45-48] bloblo [113]"
pattern = r"\[(?:(?:\d+(?:-\d+)?,){2}\d+(?:-\d+)?|(?:\d+-\d+,\d+|\d+,\d+-\d+))\]"
matches = re.findall(pattern, text)
print(matches)

输出结果与期望完全一致:

['[23,24,28-30]', '[40,45-48]']

内容的提问来源于stack exchange,提问作者José Crespo Barrios

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:10:30