Как добавить разделитель точек на разных позициях числа в Python? - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь захватить число из строки, которая иногда содержит разделители точек, а иногда - нет.В любом случае мне нужен номер с разделителем точек.

Например:

num = re.findall('\d{3}\.(?:\d{2}\.){4}\d{3}|\d{14}', txt)[0]

захватит оба варианта:

304.33.44.52.03.002
30433445203002

В случае, если он захватил один безточки, мне нужно было бы добавить точки с систематизацией:

AAA.BB.CC.DD.EE.FFF

Как я могу добавить эти точки с помощью Python?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Решение без регулярных выражений.

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

n = 30433445203002
l = list(str(n))

Добавьте точки в нужных вам позициях

l.insert(3, '.')
l.insert(6, '.')
l.insert(9, '.')
l.insert(12, '.')
l.insert(15, '.')

Если это четко определенный шаблон.Вы можете обобщить вставку выше.

После того, как вставка завершена, объедините их обратно в строку:

num = "".join(l)

Ввод:

30433445203002

Выход:

304.33.44.52.03.002
0 голосов
/ 30 декабря 2018

Вы можете захватить каждую «группу» чисел в группу захвата и обратиться к ней в строке замены.Точки можно сделать необязательными с помощью \.?.

string = "30433445203002"
regex = r"(\d{3})\.?(\d{2})\.?(\d{2})\.?(\d{2})\.?(\d{2})\.?(\d{3})"
pattern = "\\1.\\2.\\3.\\4.\\5.\\6"
result = re.sub(regex, pattern, string)

. Для получения более подробной информации смотрите re.sub

Выход:

304.33.44.52.03.002

Regex Demo

РЕДАКТИРОВАТЬ:

Если я вас неправильно понял и то, что вы на самом деле хотите, это получить первые 3 числа, 4-е и 5-е числа, 6-е и 7-е числа и т. д., вы можете использовать одно и то же регулярное выражение с search:

re.search(regex, string).group(1) # 304
re.search(regex, string).group(2) # 33
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...