如何通过正则表达式按列提取字符串中的数字?
按列提取数字:正则表达式实现方案
能通过正则表达式实现按列提取数字,但你用的[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
相关产品推荐
相关产品推荐

