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

Python正则表达式:以首次出现的字母为分隔符拆分字符串

解决字符串按首次字母拆分为数字部分和剩余部分的问题

嘿,这个问题其实很好解决!你之前用re.split(r"(\d+)", string)会把所有连续数字块和非数字块都拆分出来,所以才会得到多余的空字符串和多个片段。咱们换个更精准的思路:直接匹配开头的连续数字和剩下的所有内容,一次就能得到想要的结果。

最优实现方法:使用re.match分组捕获

我们可以用正则表达式直接定位字符串开头的数字,然后捕获剩下的全部内容,代码如下:

import re

def split_number_and_rest(input_str):
    # 正则解释:
    # ^ 匹配字符串的开始位置
    # (\d+) 捕获一个或多个连续数字(这就是我们要的初始数字部分)
    # (.*) 捕获剩下的所有内容(无论是什么字符,包括字母、数字、符号等)
    match_result = re.match(r"^(\d+)(.*)$", input_str)
    if match_result:
        # 将捕获的两个分组转为列表返回
        return list(match_result.groups())
    # 处理开头没有数字的情况(比如输入"abc123"),可根据需求调整返回值
    else:
        return ["", input_str]

测试案例

  • 输入 "123b",返回 ["123", "b"]
  • 输入 "12b7.97ap",返回 ["12", "b7.97ap"]
  • 输入 "abc123",返回 ["", "abc123"](如果不需要这种情况,也可以添加判断逻辑)

为什么你的原方法不行?

你用的re.split(r"(\d+)", string)会把所有连续数字序列和非数字序列都拆分出来:

  • 对于"123b",正则会匹配到"123"这个数字块,所以拆分后得到["", "123", "b"](空字符串是因为字符串开头到第一个数字块之间没有内容)
  • 对于"12b7.97ap",会匹配到"12"、"7"、"97"三个数字块,所以拆分后得到多个片段

而我们的需求只需要第一次出现非数字字符前的所有数字,所以直接匹配开头的数字+剩余内容是最直接高效的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:42:45