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

Python正则:按多分隔符分割字符串并保留分隔符的问题

解决方法

方法一:直接用re.findall提取目标片段

这是最直接的方案,直接匹配所有「数字+分隔符(D/M/Y)」的完整片段:

import re
string = '1D5Y4D2M'
result = re.findall(r'\d+[DMY]', string)
print(result)
# 输出: ['1D', '5Y', '4D', '2M']

说明:

  • \d+匹配1个或多个数字(确保每个片段的数字部分完整)
  • [DMY]匹配D、M、Y中的任意一个分隔符
  • findall会自动提取所有符合模式的片段,正好得到你需要的结果。

方法二:用re.split结合正向后顾断言分割

如果一定要用split实现,可以利用正则的正向后顾断言,在分隔符的后方位置分割:

import re
string = '1D5Y4D2M'
result = re.split(r'(?<=[DMY])', string)
print(result)
# 输出: ['1D', '5Y', '4D', '2M']

说明:

  • (?<=[DMY])是正向后顾断言,它会匹配所有紧跟在D/M/Y后面的位置
  • 在这些位置分割时,不会破坏原有的「数字+分隔符」结构,也不会产生多余的空字符串。

为什么你之前的尝试失败?

你之前写的正则([^D]+D|[^M]+M|[^Y]+Y)存在逻辑问题:比如[^D]+会匹配所有非D的字符,所以当遇到5Y4D时,[^D]+D会把5Y4D整个匹配进去,导致分割结果不符合预期。而上面两种方法都精准定位了每个独立的单元,避免了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:26:08