[英]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.