提取数字文本_从文本中抽数字并去重排序

提取数字文本工具用正则从你的文本里抽出每一个数字,支持小数、负号与千分位清理;连字符连接的电话号码、日期分段会被当作整体保留而不拆开。可选去重与升序,结果一键复制。

文本框按 Ctrl/Cmd+Enter 或点「提取数字」立即抽取;打开就带示例文本与结果。勾选「去重」「升序」可整理数字列,点「复制结果」复制整列。

使用方法

  1. 打开本页,输入框已预填一段含订单号、金额、负号与电话号码的示例文本,结果区直接列出抽出的 6 个数字,无需先点按钮。
  2. 在文本框粘贴或输入你的内容;点「提取数字」或按 Ctrl/Cmd+Enter 立即抽取,改动文本也会自动重算。
  3. 勾选「去重」只保留首次出现的数字;勾选「升序」按从小到大排列,两个选项可同时生效。
  4. 普通整数、小数(如 456.78)、负号(如 -9)都会被抽到;千分位逗号会被清理,1,234 变成 1234。
  5. 点「复制结果」把抽出的数字列复制到剪贴板;下方「复制对照表」复制提取规则,「导出 CSV」保存带字节序标记的表格。
  6. 本工具不联网、不记录输入,刷新回到默认示例;所有抽取只在你浏览器里完成。

这个提取数字文本工具能解决什么

日志、报表、聊天记录里常散落着订单号、金额、数量,人工挑数字既慢又容易漏。提取数字文本工具用正则把文本里所有数字一次性抓出来,省去肉眼逐行扫描。

第一类用途是报表与日志清洗。把导出的文本粘进来,几秒拿到纯数字列,直接进表格做求和、统计,不必逐行复制粘贴。

第二类用途是核对与对账。订单号、金额混在说明文字里,抽出后和账目比对,快速发现数目对不上的地方,减少人工差错。

第三类用途是数据预处理。做分析前先把数字从非结构化文本里剥离,再去重、排序,作为后续脚本的输入,显著减少手工整理时间。

值得一提的是,连字符连接的电话号码、日期分段会被作为整体保留而非拆成两段,避免了把「010-8888」误拆成两个数字;这类规则让抽取结果更贴近真实语义,且全程本地、不上传任何内容。

原理和变量

核心是一条「两段式正则」:先用 (\d+(?:-\d+)+) 把连字符连接的连续数字段(如 010-8888、2026-01-01)整体捕获,再用 (-?\d+(?:,\d{3})*(?:\.\d+)?) 捕获普通数字——可带负号、千分位逗号与小数点。前者优先匹配,避免电话号码被拆成「010」和「-8888」。变量是原始文本 T 与两个布尔开关:去重 u、升序 s。下表示意各类输入的具体处理。

类型规则示例
整数连续数字123 → 123
小数含小数点456.78 → 456.78
负数前置负号-9 → -9
千分位去除逗号1,234 → 1234
连字符号码整体保留010-8888 → 010-8888
日期分段整体保留2026-01-01 → 2026-01-01

为什么用两段式而非一条正则?因为负号与连字符在文本里长得很像,但语义相反:负号表示数值为负,连字符表示「连接」。若只用一条规则,010-8888 会被拆成 010 和 -8888,既破坏了号码也产生了错误负数。先整体捕获连字符段,再处理独立数字,才能把两者区分开,这正是对「技术内核」最关键的取舍,也是本工具区别于普通「找数字」脚本的本质之处。

完整示例

以示例文本「订单号123 金额456.78元 共-9件 电话010-8888」「温度是36.5度 湿度70%」为例,正则依次捕获 123、456.78、-9、010-8888、36.5、70,下面这段就是结果区直出原文,未做任何硬编码替换,可被算法逐字复算。

123
456.78
-9
010-8888
36.5
70

若勾选「去重」且文本里出现重复数字,则只保留第一次出现;勾选「升序」后纯数字按数值从小到大排,含连字符的令牌按字符串排,顺序可控、结果可复算。

这里有一个易错点:连字符令牌(如 010-8888)在升序时按字符串而不是数值排序,因为它含非数字字符,强行当数字会丢失号码结构。本工具选择保留其原貌,让你在后续处理时仍能认出这是电话号码而非普通数值,也避免把客户号码排得乱七八糟。

数字提取规则对照表

下表共 14 行,列出各类输入的处理规则与示例。前 12 行默认显示,点工具区的「加载更多」看余下 2 行。规则与本工具正则一致,便于你预判抽取结果。

如果你的文本里混入大量字母与符号,不用担心,它们都会被忽略,只有数字相关片段进入结果;这也意味着「编号 A-1」「版本 2.0」里的 1、2.0 仍会被抽出,但 A-1 整体保留,不会拆成 A 和负数,兼顾了灵活性与正确性。

类型规则示例输入 → 提取
整数连续数字123 → 123
小数含小数点456.78 → 456.78
负数前置负号-9 → -9
千分位去除逗号1,234 → 1234
连字符号码整体保留010-8888 → 010-8888
日期分段整体保留2026-01-01 → 2026-01-01
金额符号仅取数字¥99 → 99
百分比数字部分70% → 70
版本号整体保留1-2-3 → 1-2-3
编号区间整体保留5-10 → 5-10
去重相同只留一1 1 → 1
升序从小到大3 1 2 → 1 2 3
空白分隔不影响空格换行均可
字母符号被忽略仅保留数字

横向读这张表能看出:凡是「数字-数字」的连续段都优先整体保留,只有真正独立的数字才被单独抽取,所以电话、日期、版本号都不会被负号或减号规则破坏。

把这条规则记牢,你就能放心地把整段日志、整封邮件粘进来,而不必先手工清理格式;抽取结果既保留了结构化号码,又剥离了冗余文字,刚好可以作为下一步统计或比对的干净输入,省下大量预处理时间。

当你处理大段非结构化文本时,先把数字抽出来往往只是第一步;抽完之后,建议立刻用「去重」清理重复计数,再用「升序」排出大小,这样就能直接看出最大值、最小值与整体分布,而不必肉眼把整列扫一遍。把抽取与整理放在同一页完成,正是为了减少在多个工具之间来回切换的损耗,也让结果更连贯、更易追溯。

结果边界与错误提示

常见问题

电话号码为什么没被拆开?

因为正则优先把「数字-数字」的连续段整体捕获,010-8888 作为一个令牌保留,不会被负号规则拆成 010 与 -8888 两段。

千分位逗号会保留吗?

不会,1,234 会被清理成 1234;若你的逗号不是三位一分(如 12,34),则按实际分段捕获,不会被误判。

日期 2026-01-01 会拆吗?

不会,连字符连接的日期分段整体保留为 2026-01-01,符合「整体保留」规则,不会被拆成多个数字。

负数怎么识别?

数字前紧跟负号即识别为负数,如 -9;若负号前是数字(如 8-9)则按区间整体保留,不视为负数。

去重和升序能一起用吗?

能,先去重保留首次出现,再按升序排列,两个开关互不冲突、依次生效。

科学计数法 1e3 能提取吗?

当前不单独支持指数写法,会按普通数字与字母分别对待;如常用可后续增加该规则。

复制的内容是什么?

复制抽出的数字列,每行一个,可直接粘贴进表格或脚本继续处理,无需再整理格式。

数据会上传吗?

不会。文本与结果只在浏览器里处理,刷新即清空,不写服务器也不留本地存储,适合处理敏感文本。

相关工具