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

如何随机化字符串字符并保留短横线的固定位置?

解决UUID字符随机化但保留短横线位置的问题

你的问题核心是要保留短横线的固定位置,只随机打乱其他字符——原来的random.sample(id, len(id))会把所有字符(包括短横线)混在一起打乱,自然会破坏结构。这里有两种简单可靠的方案:

方案一:基于原字符串结构逐个重建

这种方法通用,不管短横线在什么位置都能适用,思路是先把非短横线字符提取出来打乱,再按原字符串的结构把短横线放回原位:

import random

original_id = 'ee9baadc-46bc-4486-a78b-830f5b2bcfc9'

# 第一步:提取所有非短横线的字符
non_dash_chars = [c for c in original_id if c != '-']
# 第二步:打乱这些字符(copy是避免修改原列表)
shuffled_chars = non_dash_chars.copy()
random.shuffle(shuffled_chars)

# 第三步:按原结构重建新ID
new_id = []
char_ptr = 0
for char in original_id:
    if char == '-':
        new_id.append('-')
    else:
        new_id.append(shuffled_chars[char_ptr])
        char_ptr += 1

new_id = ''.join(new_id)
print(new_id)  # 输出示例:9eebaadc-64cb-8464-a87b-308f5b2bcfc9

方案二:利用UUID的固定分段特性(更简洁)

UUID的格式是固定的8-4-4-4-12结构,我们可以直接按短横线分割成各个段,单独打乱每个段内的字符,再重新拼接:

import random

original_id = 'ee9baadc-46bc-4486-a78b-830f5b2bcfc9'

# 按短横线分割成各个段
segments = original_id.split('-')
# 对每个段内的字符随机打乱
shuffled_segments = [''.join(random.sample(seg, len(seg))) for seg in segments]
# 用短横线重新连接成新ID
new_id = '-'.join(shuffled_segments)
print(new_id)  # 输出示例:daecab9e-b64c-6844-b8a7-038f5b2bcfc9

这两种方法都能完美实现你的需求:短横线位置完全不变,其他字符随机重排。方案二更适合UUID这种有固定分段的场景,代码也更简洁;方案一则更通用,适用于任何需要保留特定字符位置的字符串打乱需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:35:21