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

正则表达式技术问询:如何捕获文本中未知数量的数字

如何捕获文本中所有不确定数量的数字

首先,咱们得先搞清楚你之前写的正则[\D*(\d*)]+为什么不生效——这里的核心问题是字符类(方括号[])的用法错误。字符类里的内容是“单个字符的集合”,它只会匹配其中任意一个字符,而不是你想的“非数字+数字”的重复单元。比如[\D*(\d*)]其实是匹配\D、*、(、\d、)中的任意一个字符,加上+后就是重复匹配这些单个字符,完全达不到你要的“跳过非数字、捕获数字”的效果。

接下来,说说正确的实现思路:

当你不确定文本里有多少个数字序列时,不要试图用固定数量的分组(比如你之前的\D*(\d*)\D*...),因为分组的数量是写死的,没法动态适配不确定的数字个数。正确的做法是用全局匹配,让正则反复查找所有符合条件的数字序列。

核心正则表达式

如果只需要捕获纯数字(不带负号),用:

\d+
  • \d匹配单个数字
  • +表示匹配1个或多个连续数字(避免匹配空字符串)

如果你的文本里有带负号的数字(比如示例里的-6464),想要连负号一起捕获,就用:

-?\d+
  • -?表示匹配0个或1个负号

具体实现示例

Python

import re
text = "qsdfq fmld - 123 -mqlskdj -6464 - qlsdkjflj - 54654 -qsdfqsdf -2542"
# 捕获纯数字
numbers = re.findall(r'\d+', text)
print(numbers)  # 输出: ['123', '6464', '54654', '2542']

# 捕获带负号的数字
signed_numbers = re.findall(r'-?\d+', text)
print(signed_numbers)  # 输出: ['123', '-6464', '54654', '-2542']

JavaScript

const text = "qsdfq fmld - 123 -mqlskdj -6464 - qlsdkjflj - 54654 -qsdfqsdf -2542";
// 捕获纯数字
const numbers = text.match(/\d+/g);
console.log(numbers); // 输出: ["123", "6464", "54654", "2542"]

// 捕获带负号的数字
const signedNumbers = text.match(/-?\d+/g);
console.log(signedNumbers); // 输出: ["123", "-6464", "54654", "-2542"]

补充说明

  • 全局匹配标志g(在JavaScript里需要加,Python的findall默认就是全局查找)是关键,它会让正则遍历整个文本,找出所有匹配的结果,而不是只找第一个。
  • 如果你用的是其他工具(比如正则测试器、Shell命令),只要开启全局匹配,用\d+或-?\d+就能得到所有数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:24:47