Python逐行可靠拆分字符串中的多词文本与数字序列
固定格式行的文本与数字可靠拆分方案
固定位截取方案失效的核心原因是前置文本段长度不固定,强行按22字符切分会在文本段较短时把后续数字切进文本部分。利用该格式「行首为任意长度的多词文本、从第一个纯数字字段开始到行尾全为数字列」的特征,可以用以下两种无位置依赖的方法实现100%准确拆分:
方法1:正则实现(代码最简洁)
直接通过正则匹配行首的非数字段和后续的数字段,自动兼容任意长度的文本、任意数量的分隔空白(空格、制表符均支持):
import re def split_content_and_numbers(line): # 去除行尾换行后,匹配开头非数字文本+后续数字段 content_match = re.match(r'^(\D+)\s+(.*)$', line.rstrip('\n')) words = content_match.group(1).strip() numbers = [int(num) for num in content_match.group(2).split()] return words, numbers
方法2:逐字段判断实现(无正则依赖)
先把整行按空白拆成独立字段,找到第一个纯数字字段的位置,前面的拼接为文本,后面的转成数字列表:
def split_content_and_numbers(line): tokens = line.strip().split() # 定位第一个数字字段的索引 num_start_idx = 0 for idx, token in enumerate(tokens): if token.isdigit(): num_start_idx = idx break words = ' '.join(tokens[:num_start_idx]) numbers = [int(token) for token in tokens[num_start_idx:]] return words, numbers
使用说明
- 两种方法都完全适配给出的所有样例行,包括最后一行短文本的场景,不会出现数字被误划入文本的问题
- 直接替换原有循环里的固定截取逻辑即可:
for line in file: words, numbers = split_content_and_numbers(line) list_of_lists.append([words, numbers])
- 如果后续文件里的数字出现负数、浮点数格式,只需要调整正则匹配规则或者数字判断逻辑即可,核心的分界定位逻辑不需要改动。
内容的提问来源于stack exchange,提问作者rangeseeker
相关产品推荐
相关产品推荐

