python 将字符串转换为三个块,如果不是两个块

python converting strings into three blocks and if not two blocks

我想编写一个函数来转换给定的字符串 T 并将它们分组为三个块。 但是,如果不能分解为三个数字,我想将最后一个块分成两个。 例如,这是我的代码

import re

def num_format(T):
    clean_number = re.sub('[^0-9]+', '', T)
    formatted_number = re.sub(r"(\d{3})(?=(\d{3})+(?!\d{3}))", r"-", clean_number) 
    return formatted_number


num_format("05553--70002654")

this returns : '055-537-000-2654' 结果。 但是,我希望它是“055-537-000-26-54”。 我使用正则表达式,但不知道如何将最后剩下的数字分成两块!

非常感谢能帮我解决这个问题!! 提前致谢。

您可以使用

def num_format(T):
    clean_number = ''.join(c for c in T if c.isdigit())
    return re.sub(r'(\d{3})(?=\d{2})|(?<=\d{2})(?=\d{2}$)', r'-', clean_number)

参见regex demo

请注意,您可以使用简单的 Python 理解来摆脱所有非数字字符,解决方案是从 Removing all non-numeric characters from string in Python.

借来的

正则表达式匹配

  • (\d{3}) - 第 1 组 (</code>):三位数...</li> <li><code>(?=\d{2}) - 后跟两位数字
  • | - 或
  • (?<=\d{2})(?=\d{2}$) - 任何两个数字序列和字符串末尾的两个数字之间的位置。

参见 Python demo:

import re
 
def num_format(T):
    clean_number = ''.join(c for c in T if c.isdigit())
    return re.sub(r'(\d{3})(?=\d{2})|(?<=\d{2})(?=\d{2}$)', r'-', clean_number)
 
print(num_format("05553--70002654"))
# => 055-537-000-26-54