Python如何通过正则实现指定模式的字符串分割
解决方案
你原正则里的\D+会匹配任意长度的连续非数字字符,这就是连续无数字前缀字母被合并成单个元素的原因。只要调整匹配逻辑,优先匹配「连续数字+紧跟的1个小写字母」的组合,剩余的小写字母按单个匹配就能得到预期结果。
正确实现代码:
import re string = "ff19shh24c" # 注意匹配顺序:优先匹配数字+字母的整体,再匹配单个小写字母 parts = re.findall(r'\d+[a-z]|[a-z]', string) print(parts)
运行输出:
['f', 'f', '19s', 'h', 'h', '24c']
正则规则说明
\d+[a-z]:匹配1位及以上连续数字,加上紧跟的1个小写字母,对应「连续数字与其后紧跟的1个小写字母作为整体元素」的要求- 正则的
|是或逻辑,把组合匹配规则放在前面,是为了避免数字后面跟着的字母被单个匹配规则提前拆分 [a-z]:匹配单个小写字母,由于组合规则已经提前把数字连带其后的字母匹配完成,剩下的字母全是无数字前缀的内容,按单个匹配即可,对应「无数字前缀的单个字母单独作为元素」的要求
内容的提问来源于stack exchange,提问作者Andy95
相关产品推荐
相关产品推荐

