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

