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

Python中如何用正则或循环按规则条件分割符合特定模式的字符串

解决方案

你可以直接用re.findall()匹配符合规则的子单元,比re.split()更贴合当前需求,不需要额外处理拆分点和边界问题。

正则表达式

匹配模式为:

import re
pattern = r'(?:10|\d)[SDT][*#]?'

使用示例

# 测试用例1
c1 = '1D2S#10S'
print(re.findall(pattern, c1))
# 输出:['1D', '2S#', '10S']

# 测试用例2
c2 = '1D#2S*3S'
print(re.findall(pattern, c2))
# 输出:['1D#', '2S*', '3S']

模式说明

  • (?:10|\d):匹配数字部分,优先匹配10,再匹配单个0-9数字,?:表示非捕获组,避免findall仅返回分组内容
  • [SDT]:匹配必填的字母位,仅允许S、D、T三个字符
  • [*#]?:匹配可选的特殊符号,?表示该部分可出现0次或1次

进阶用法

如果后续需要直接提取每个子单元的数字、幂次、特殊符号三个部分做计算,可以把非捕获组改为普通捕获组:

pattern_with_group = r'(10|\d)([SDT])([*#]?)'
print(re.findall(pattern_with_group, c1))
# 输出:[('1', 'D', ''), ('2', 'S', '#'), ('10', 'S', '')]

直接拿到结构化的元组数据,不需要二次拆分字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 23:15:02