Python中相邻字符串字面量自动拼接后如何拆分得到原始各子串?
核心前提
Python在代码编译阶段就会自动将相邻的字符串字面量拼接为完整字符串,运行阶段拿到的A = 'Ihave2phones.'已经是没有任何原始拆分边界标记的普通字符串,不可能凭空还原出原始的4个子串切片,所有方案都需要额外的前置处理或者自定义拆分规则。
可行解决方案
场景1:可以修改原始字符串定义代码(最推荐)
这种场景下你可以提前保存拆分信息,完全避免后续还原问题:
- 方案1:直接定义子串列表,按需拼接得到完整字符串
# 提前保存原始子串 raw_parts = ["I", "have", "2", "phones."] # 需要完整字符串时直接拼接 A = ''.join(raw_parts) # 要拆分时直接取raw_parts即可,结果就是['I', 'have', '2', 'phones.']
- 方案2:添加自定义分隔符,后续按分隔符拆分
可以用一个不会出现在字符串内容中的特殊字符作为分隔标记,定义时插入分隔符,拆分时直接切割:
# 用不可见控制符\x00作为分隔符,普通文本基本不会出现 A = "I" "\x00" "have" "\x00" "2" "\x00" "phones." # 拆分时直接按分隔符切割 raw_parts = A.split("\x00")
场景2:无法修改原始定义,只能拿到拼接后的完整字符串
这种场景只能根据你的字符串内容规律,自定义规则拆分,比如你的示例是字母、数字、带点的英文单词组合,可以用正则匹配实现:
import re A = 'Ihave2phones.' # 按你的字符串规律写匹配规则:匹配纯字母、纯数字、末尾带点的字母串 raw_parts = re.findall(r'[A-Za-z]+|\d+|[A-Za-z]+\.', A) # 输出结果:['I', 'have', '2', 'phones.']
注意:正则匹配没有通用方案,需要根据你实际的字符串内容调整匹配规则,才能得到正确的拆分结果。
格式转换需求
如果你需要得到'"I" "have" "2" "phones."'格式的字符串,可以在拆分得到子串列表后自行拼接:
formatted_str = '"' + '" "'.join(raw_parts) + '"'
内容的提问来源于stack exchange,提问作者fluency23
相关产品推荐
相关产品推荐

