繁体   English   中英

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

[英]python converting strings into three blocks and if not two blocks

我想编写一个 function 来转换给定的字符串 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"\1-", clean_number) 
    return formatted_number


num_format("05553--70002654")

结果返回:'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'\1-', clean_number)

请参阅正则表达式演示

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

正则表达式匹配

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

请参阅Python 演示

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'\1-', clean_number)
 
print(num_format("05553--70002654"))
# => 055-537-000-26-54

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM