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

正则表达式提取字符串中方括号内有效整数的实现问题

解决方括号内整数提取的正则问题

我来帮你搞定这个正则表达式的难题!你的需求是提取字符串中**仅被方括号包裹、且括号内只有空格和整数(含可选正负号)**的数字,而你之前的正则re.findall(r'[-]?\d+', ...)会提取所有出现的数字,不管它是否在合法的方括号内,也不管括号里有没有其他字符,这就是为什么会把[a34]里的34也误提出来。

解决方案

我们需要精准定位符合要求的方括号内容,对应的正则表达式和完整函数如下:

import re

def integers_in_brackets(s):
    # 匹配方括号内的合法整数(允许括号与数字间有空格)
    valid_matches = re.findall(r'\[\s*([+-]?\d+)\s*\]', s)
    # 将提取到的字符串转换为整数,自动去除+号、保留-号
    return [int(num_str) for num_str in valid_matches]

正则表达式详解

让我们拆解一下这个正则的各个部分:

  • \[:匹配左方括号(方括号是正则特殊字符,必须转义)
  • \s*:匹配任意数量的空格(包括0个,兼容括号与数字间的空格)
  • ([+-]?\d+):捕获分组,匹配:
    • [+-]?:可选的正号或负号
    • \d+:一个或多个数字
  • \s*:再次匹配任意数量的空格
  • \]:匹配右方括号

测试示例

调用你给出的测试用例:

print(integers_in_brackets(" afd [asd] [12 ] [a34] [ -43 ]tt [+12]xxx"))

输出结果完全符合预期:[12, -43, 12]

这个正则会自动排除以下不符合要求的内容:

  • [asd]:括号内无数字,不匹配
  • [a34]:括号内包含字母,无法匹配完整的正则规则,因此不会被提取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:23:36