如何识别字符串中的个位数字并在前面插入零?

3
在Python中,我有一个字符串,其中包含一个或两个数字: 8 5E 9C 52 30 0 在字符串中的每个一位数上,我想要在它前面加上一个零(例如将 5 转换为 05)并将其变成两位数。
考虑使用 .split(' ') 分割字符串,并逐一检查并使用 .zfill(2) 将每个单个数字转换为两个数字。
那么我的问题是,是否有一种方法可以识别字符串中的所有单个数字,并通过插入前导零将其全部转换为两个数字?

1
你是说你已经尝试了其他方法,想知道是否有更快的方法吗?你描述的方法是我会采用的方法。 - anonymoose
split() 应该可以完成这项工作,你试过了还是需要其他方法? - bhansa
1
prefilled = " ".join([x.zfill(2) for x in my_string.split()]) - engineercoding
等一下,你想让9C变成09C还是保持不变? - JacobIRR
@JacobIRR 所有的两位数字都应该保持不变。 - Jo Ko
4个回答

7

zfill(..) 的好处在于,如果内容包含两个字符,那么该字符串将保持不变。因此,您可以简单地使用生成器(或列表推导式),然后将结果用 ' '.join(..) 组合在一起:

result = ' '.join(x.zfill(2) for x in data.split())

这会生成:

>>> data = '8 5E 9C 52 30 0'
>>> ' '.join(x.zfill(2) for x in data.split())
'08 5E 9C 52 30 00'

3

一个使用列表推导式的简单解决方案。

代码:

def pad_hex_str(hex):
    return ' '.join(['0' + h if len(h) == 1 else h for h in hex.split()])

测试代码:

hex_str = '8 5E 9C 52 30 0'
print(pad_hex_str(hex_str))

结果:

08 5E 9C 52 30 00

0
>>> re.sub(r'(\b\d\b)', r'0\1', string)
>>> '08 5E 9C 52 30 00'

当然不要忘记导入re模块


抱歉,您介意为了学习目的解释一下它在做什么吗?还有我需要导入什么re模块? - Jo Ko
抱歉,我仍然不理解r'0\1'。您所说的组和前置组是什么意思? - Jo Ko
@JoKo 请查看regex101.com上的示例。它很好地展示了正则表达式的工作原理,并提供了解释。 - TemporalWolf
Jo,当你在外面加括号时,我的意思是如果我们写r'(\b\d\b)'而不是r'\b\d\b',我们可以将其称为一组。例如(?<!\S)\d(?![^\s.,?!])这个正则表达式有两个组,我们可以将(?<!\S)别名为'\1',将(?![^\s.,?!])别名为'\2'。这就是在re中添加和替换的方法。 - Abhishek Menon
@JoKo 正则表达式可能很难理解,它是一种独立的语言。上面的示例使用“regex”来匹配字符串。我认为其他示例可能更符合您的要求。 - NineTail
显示剩余4条评论

0

split 和使用 zfill 会很好地工作。

st = "8 5E 9C 52 30 0"
res = ""
for i in st.split():
        res += " " + i.zfill(2)  
print res

#output
08 5E 9C 52 30 00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接