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

无需正则表达式,如何按shiftdate拆分Python字符串?

问题:拆分以"shiftdate"开头的字符串片段

给定包含重复标识的长字符串:

sampleString = "shiftdate_154_04-01-2024@scode_154_AAA@shiftstart_154_0000@shiftend_154_2400@eligdate_154_04-01-2024@forfdate_154_04-01-2024@payoutdate_154_04-01-2024@payoutscode_154_AA59@schedhol_154_Y@scheddate_154_@autosched_154_Y@autoscheddate_154_@shiftdate_155_@scode_155_AACT@shiftstart_155_0000@shiftend_155_2400@eligdate_155_@forfdate_155_@payoutdate_155_@payoutscode_155_155_AA59@schedhol_155_ @scheddate_155_@autosched_155_ @autosched_155date_155_"

需要将其拆分为以"shiftdate"开头的元素列表,预期结果:

result_list = [
  "shiftdate_154_04-01-2024@scode_154_AAA@shiftstart_154_0000@shiftend_154_2400@eligdate_154_04-01-2024@forfdate_154_04-01-2024@payoutdate_154_04-01-2024@payoutscode_154_AA59@schedhol_154_Y@scheddate_154_@autosched_154_Y@autoscheddate_154_@",
  "shiftdate_155_@scode_155_AACT@shiftstart_155_0000@shiftend_155_2400@eligdate_155_@forfdate_155_@payoutdate_155_@payoutscode_155_155_AA59@schedhol_155_ @scheddate_155_@autosched_155_ @autosched_155date_155_"
]

尝试使用split()函数会移除"shiftdate"标识,询问可行的Python方法,以及在"shiftdate"前插入逗号再拆分是否可行。


解决方案

方法一:使用正则表达式(推荐)

Python的re库可以直接匹配所有以"shiftdate"开头的连续片段,直到下一个"shiftdate"出现或字符串结束。用re.findall()即可实现:

import re

sampleString = "shiftdate_154_04-01-2024@scode_154_AAA@shiftstart_154_0000@shiftend_154_2400@eligdate_154_04-01-2024@forfdate_154_04-01-2024@payoutdate_154_04-01-2024@payoutscode_154_AA59@schedhol_154_Y@scheddate_154_@autosched_154_Y@autoscheddate_154_@shiftdate_155_@scode_155_AACT@shiftstart_155_0000@shiftend_155_2400@eligdate_155_@forfdate_155_@payoutdate_155_@payoutscode_155_155_AA59@schedhol_155_ @scheddate_155_@autosched_155_ @autosched_155date_155_"

# 正则规则:匹配shiftdate开头,非贪婪匹配到下一个shiftdate或字符串结尾
result = re.findall(r'shiftdate.*?(?=shiftdate|$)', sampleString, re.DOTALL)
print(result)

规则解释:

  • shiftdate:精准匹配起始标识
  • .*?:非贪婪模式匹配任意字符(re.DOTALL确保匹配换行符)
  • (?=shiftdate|$):正向预查,遇到下一个shiftdate或字符串结尾时停止,不会消耗该标识

方法二:插入分隔符后拆分(可行)

你提到的在"shiftdate"前插入逗号再拆分的思路是可行的,步骤如下:

  1. 仅在非字符串开头的"shiftdate"前插入分隔符(比如逗号)
  2. 按分隔符拆分字符串
  3. 拆分后的元素自动保留"shiftdate"开头的完整片段

代码示例:

import re

sampleString = "shiftdate_154_04-01-2024@scode_154_AAA@shiftstart_154_0000@shiftend_154_2400@eligdate_154_04-01-2024@forfdate_154_04-01-2024@payoutdate_154_04-01-2024@payoutscode_154_AA59@schedhol_154_Y@scheddate_154_@autosched_154_Y@autoscheddate_154_@shiftdate_155_@scode_155_AACT@shiftstart_155_0000@shiftend_155_2400@eligdate_155_@forfdate_155_@payoutdate_155_@payoutscode_155_155_AA59@schedhol_155_ @scheddate_155_@autosched_155_ @autosched_155date_155_"

# 在非开头的shiftdate前插入逗号
modified_str = re.sub(r'(?<!^)shiftdate', r',shiftdate', sampleString)
# 按逗号拆分得到结果
result = modified_str.split(',')
print(result)

规则解释:

  • (?<!^)shiftdate:反向预查,确保只给不是字符串开头的"shiftdate"添加前缀逗号,避免第一个元素前出现空字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:41:17