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

如何通过正则表达式按列提取字符串中的数字?

按列提取数字:正则表达式实现方案

能通过正则表达式实现按列提取数字,但你用的[0-9]+.*\d模式逻辑不对——它会匹配从行内第一个数字开始,到行尾最后一个数字的所有内容,根本没法实现按列拆分的需求。

具体实现思路

你的数据是固定列数的结构化文本,核心思路是用捕获组分别匹配每一行的对应列数字,再将捕获到的同列内容重组输出。

以Python为例,代码如下:

import re

# 假设文件内容已读取到text变量中
text = """1000  1000   500     0 
1     0     0     0 
"""

# 用正则捕获每一行的4列数字,re.MULTILINE让^/$匹配每行首尾
pattern = re.compile(r'^(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$', re.MULTILINE)
# 提取所有行的捕获组结果,得到一个二维列表
column_data = pattern.findall(text)

# 按列重组并输出
for col in zip(*column_data):
    print('\n'.join(col))
    # 用分隔线区分不同列,和你期望的格式对应
    print('\n---\n')

运行后输出结果:

1000
1

---

1000
0

---

500
0

---

0
0

关键正则解释

^(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$:

  • ^和$:在re.MULTILINE模式下,分别匹配每行的开头和结尾
  • (\d+):捕获组,匹配一列数字(至少1位)
  • \s+:匹配列之间的任意数量空白符(空格、制表符都适用)

为什么你的原模式不行?

[0-9]+.*\d的逻辑是:匹配1个以上数字,接着匹配任意字符(直到行尾前),最后匹配1个数字。这会直接把整行的大部分内容当成一个匹配结果,完全无法拆分出独立的列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:22:29