Как заполнить все числа в строке

У меня есть много строк стиля адреса, и я хочу отсортировать их рациональным способом.

Я надеюсь заполнять все числа в строке так, чтобы: "Плоское Высотное здание на 12 А" становится "Плоским 00012A Высотным зданием", может быть несколько чисел в строке.

До сих пор я имею:

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

Может это быть улучшенным - взгляды pugly мне!

7
задан Ross 23 June 2010 в 12:57
поделиться

2 ответа

Как насчет этого?

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'
>>> 
7
ответ дан 6 December 2019 в 12:46
поделиться

Вместо того, чтобы изменять данные в соответствии с алгоритмом сортировки, измените алгоритм сортировки в соответствии с вашими данными.

См. Сортировка для людей: естественный порядок сортировки на Ужас кодирования :

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 ) 
9
ответ дан 6 December 2019 в 12:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: