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

如何修改Python函数实现字符串按字母、数字、特殊字符拆分?

解决方案

你可以通过调整正则表达式和简化处理逻辑来实现需求,修改后的函数如下:

import re

def split_string_with_letters_and_non_letters(input_string):
    # 匹配连续字母段、连续数字段、单个特殊字符(非单词非空格)
    parts = re.findall(r'[a-zA-Z]+|\d+|[^\w\s]', input_string)
    # 用|连接所有片段,保留原大小写
    return '|'.join(parts)

teststring = "SPRINTER2500 2WD C E-150"
print(split_string_with_letters_and_non_letters(teststring))

运行结果:

SPRINTER|2500|2|WD|C|E|-|150

原函数的问题分析

  • 正则表达式错误:原正则r"([a-zA-Z] )+"仅匹配"字母+空格"的重复组合,完全无法覆盖数字段、单独特殊字符等场景,拆分逻辑从根源上不符合需求。
  • 不必要的去重和转小写:原函数中if x not in result会移除重复片段(但需求是按顺序保留所有拆分出的片段),x.lower()会把所有字母转成小写,和期望的原大小写输出不符。
  • 冗余处理:count变量未实际参与逻辑,属于无效代码;strip()和空值/空格判断也会干扰正常片段的保留。

正则表达式说明

r'[a-zA-Z]+|\d+|[^\w\s]'的匹配规则:

  • [a-zA-Z]+:匹配一个或多个连续的英文字母(保留原大小写)
  • \d+:匹配一个或多个连续的数字
  • [^\w\s]:匹配单个非单词(非字母数字下划线)且非空格的特殊字符(比如-、/等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:05:09