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

Python 如何在字符串出现整数的位置对其进行拆分?

爬虫粘连字符串按首个数字拆分实现方法

核心需求是将混合字母、数字的字符串,在第一个数字出现的位置切割为前后两段,以下是Python环境下的几种可行实现:

方法1:正则表达式实现(最简便)

使用正则正向预查匹配首个数字的前置位置,直接切割,不会消耗数字字符,无需额外拼接:

import re

def split_by_first_digit(s: str) -> tuple[str, str]:
    # maxsplit=1 保证只切割一次,匹配首个数字位置
    parts = re.split(r'(?=\d)', s, maxsplit=1)
    # 处理无数字的边界情况
    return parts if len(parts) == 2 else (s, '')

# 测试样例
strings = ['string123', 'a12', 'bob69', 'test', '123abc']
for s in strings:
    print(split_by_first_digit(s))

输出结果:

('string', '123')
('a', '12')
('bob', '69')
('test', '')
('', '123abc')

方法2:遍历索引实现(无依赖,性能稳定)

不需要引入正则库,遍历字符串找到第一个数字的下标后切片,适合短字符串批量处理场景:

def split_by_first_digit(s: str) -> tuple[str, str]:
    for idx, char in enumerate(s):
        if char.isdigit():
            return s[:idx], s[idx:]
    # 字符串内无数字的情况
    return s, ''

测试逻辑和输出结果和正则方法完全一致。

方法3:itertools 函数式实现

适合偏好函数式写法的场景,通过takewhile提取所有前置非数字字符计算切割位置:

from itertools import takewhile

def split_by_first_digit(s: str) -> tuple[str, str]:
    prefix_len = sum(1 for _ in takewhile(lambda c: not c.isdigit(), s))
    return s[:prefix_len], s[prefix_len:]

边界情况说明

  • 字符串无数字:返回(原字符串, 空串)
  • 字符串开头就是数字:返回(空串, 原字符串)
  • 字符串全为数字:返回(空串, 原字符串)

内容的提问来源于stack exchange,提问作者Perkūns

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:57:03