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
我想编写一个函数来转换给定的字符串 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