如何在字符串中填充所有数字

7

我有很多地址字符串,想要以合理的方式对它们进行排序。

我希望将字符串中的所有数字都填充为固定长度,例如:"Flat 12A High Rise" 变成 "Flat 00012A High Rise",字符串中可能有多个数字。

目前我已经做到了:

def pad_numbers_in_string(string, padding=5):
    numbers = re.findall("\d+", string)
    padded_string = ''
    for number in numbers:
        parts = string.partition(number)
        string = parts[2]
        padded_string += "%s%s" % (parts[0], parts[1].zfill(padding))
    padded_string += string

return padded_string

这个能不能改进一下 - 在我看来有点丑陋!

2个回答

9

不要改变你的数据以适应排序算法,而是改变你的排序算法以适应你的数据。

参见《人性化排序:自然排序》Coding Horror上:

import re 

def sort_nicely( l ): 
  """ Sort the given list in the way that humans expect. 
  """ 
  convert = lambda text: int(text) if text.isdigit() else text 
  alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] 
  l.sort( key=alphanum_key ) 

约翰 - 这太棒了,正是我一开始想要的,但不知道该怎么做!谢谢你! - Ross

8
这个怎么样?
re.sub('\d+', lambda x:x.group().zfill(padding), s)

例子:

>>> s = "Flat 12A High Rise 101B"
>>> padding = 5
>>> re.sub('\d+', lambda x:x.group().zfill(padding), s)
'Flat 00012A High Rise 00101B'
>>> 

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