如何在Python中数字的不同位置添加点分隔符?

时间:2018-12-30 08:40:00

标签: python regex

我试图从一个字符串中捕获一个数字,该字符串有时包含点分隔符,有时却不包含点分隔符。无论如何,我都需要一个带点分隔符的数字。

例如:

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 :(得分:1)

您可以将数字的每个“组”捕获到一个捕获组中,并在替换字符串中对其进行引用。可以使用\.?将点设为可选。

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

编辑:

如果我误解了您,而您真正想要的是获取前三个数字,第四和第五个数字,第六和第七个数字等,则可以将相同的正则表达式与{{1} }:

search

答案 1 :(得分:1)

无正则表达式的解决方案。

您可以将其转换为list并在所需位置插入点,以确保值为string

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

在所需位置添加点

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

如果这是定义明确的模式。您可以对上面的插入进行概括。

插入完成后,join将它们返回到字符串:

num = "".join(l)

输入:

30433445203002

输出:

304.33.44.52.03.002