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
相关产品推荐
相关产品推荐

