Как отформатировать строку? - PullRequest
0 голосов
/ 11 мая 2018

У меня есть диапазон строк, таких как: "024764108", "002231531", "005231329", они имеют ровно 9 цифр. И я хочу добавить - к каждой группе из 3 цифр. В результате я хочу, как показано ниже: "024-764-108", "002-231-531", "005-231-329". Как я могу объяснить свою мысль питону?

Ответы [ 7 ]

0 голосов
/ 11 мая 2018

Это также делает:

import re
s='024764108'
print(('{}-'*2+'{}').format(*re.findall('(...)',s)))

или, если вы хотите сделать это во всех строках, вы можете использовать функцию применения панды.

0 голосов
/ 11 мая 2018

Смотри вперед положительно, \ d {3} означает три цифры, за которыми следует цифра (? = \ D), после трех цифр добавляется '-' ('\ 1 -').

import re
number="024764108"
re.sub(r'(\d{3})(?=\d)',r'\1-',number)
0 голосов
/ 11 мая 2018

Если вы используете Python 3.6, вы можете рассмотреть 'f строк', f строк позволяют вам выполнять некоторую обработку внутри строки.

f'{string[:3]}-{string[3:6]}-{string[6:]}'

Другой вариант - разделить строку на три части, а затем выполнить соединение с массивом.

split_string = [string[i: i + 3] for i in range(0, len(string), 3)]
formated_number = '-'.join(split_string)

Первая строка создает массив с подстроками длины 3, затем он соединяет элементы этого массива с символом '-' между ними.

0 голосов
/ 11 мая 2018

Простое решение:

number = "024764108"
new_number = number[:3] + '-' + number[3:6]+ '-' + number[6:]
0 голосов
/ 11 мая 2018

Вот динамическое решение:

In [41]: df
Out[41]:
               num
0        024764108
1        002231531
2        005231329
3  012345678901234

In [42]: df.num.str.extractall(r'(\d{3})').groupby(level=0)[0].apply('-'.join)
Out[42]:
0            024-764-108
1            002-231-531
2            005-231-329
3    012-345-678-901-234
Name: 0, dtype: object
0 голосов

Рассмотрим этот код, используя срезы строк: сегмент кода, который преобразует эту строку в ваш формат: string[0:3] + "-" + string[3:6] + "-" + string[6:9]

Вот ваш обновленный метод и несколько тестов. Кроме того, он принимает только те выходы, которые содержат ровно 9 цифр.

def format_digitstring(string:str):
    if len(string) != 9:
        return None
    return string[0:3] + "-" + string[3:6] + "-" + string[6:9]

s1 = "024764108"
s2 = "002231531"
s3 = "005231329"
s4 = "00112341"

print(format_digitstring(s1))
print(format_digitstring(s2))
print(format_digitstring(s3))
print(format_digitstring(s4))

Выход:

024-764-108
002-231-531
005-231-329
None
0 голосов
/ 11 мая 2018

Вероятно, есть лучший способ сделать это, но вы можете использовать [], чтобы разбить строку на части по 3.

old_str = "024764108"
new_str = old_str[:3] + '-' +  old_str[3:6] + '-' + old_str[6:]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...