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

如何依据字符串s1的空格分隔布局格式化字符串s2

按指定空格格式重新分配字符串内容

给定两个字符串:

s1 = "123    456 789 012 1234"
s2 = "1234567"

需要参照s1的空格分布格式,将s2的字符填充进去,最终得到输出:

Output = "123   456 7"

解决思路

核心是先解析s1的结构:拆分出所有非空格段的长度,以及段与段之间的空格数量,之后按这个结构依次从s2中取对应长度的字符,拼接上间隔空格,直到s2的字符耗尽。

代码实现

def format_by_space_pattern(s1, s2):
    # 解析s1的非空格段长度和段间空格数
    segment_lengths = []
    space_intervals = []
    current_seg_len = 0
    current_space_len = 0
    in_space = False

    for char in s1:
        if char == ' ':
            in_space = True
            current_space_len += 1
        else:
            if in_space:
                space_intervals.append(current_space_len)
                current_space_len = 0
                in_space = False
            current_seg_len += 1
    # 记录最后一个非空格段的长度
    if current_seg_len > 0:
        segment_lengths.append(current_seg_len)
    
    # 按格式拼接s2的内容
    result = []
    s2_idx = 0
    s2_total = len(s2)

    for i in range(len(segment_lengths)):
        # 计算当前能取的字符长度,不超过s2剩余字符数
        take = min(segment_lengths[i], s2_total - s2_idx)
        if take <= 0:
            break
        # 添加当前段的字符
        result.append(s2[s2_idx:s2_idx+take])
        s2_idx += take
        # 如果还有间隔空格且s2还有剩余字符,添加空格
        if i < len(space_intervals) and s2_idx < s2_total:
            result.append(' ' * space_intervals[i])
    
    return ''.join(result)

# 测试示例
s1 = "123    456 789 012 1234"
s2 = "1234567"
output = format_by_space_pattern(s1, s2)
print(f'Output = "{output}"')

代码说明

  1. 遍历s1时,分别统计每个非空格段的长度,以及段之间的空格数量,得到segment_lengths(各段字符数)和space_intervals(段间空格数)两个列表。
  2. 遍历segment_lengths,每次从s2中取对应长度的字符(如果s2剩余字符不足,就取剩下的所有),拼接到结果里。
  3. 每添加完一个段后,如果还有对应的间隔空格,且s2还有剩余字符,就把空格也拼进去。
  4. 直到s2的字符全部用完,停止拼接,得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:01:22