在Python中,删除字符串中数字之间的空格

9

我希望能够在Python中删除字符串中数字之间的所有空格。例如,如果我有以下字符串:

my_string = "my phone number is 12 345 6789"

我希望它变成
my_string = "my phone number is 123456789"

我以为我可以对每个数字都这样做:

for i in range(10):
   my_string = my_string.replace(str(i)+" ",str(i))

但这不是一个聪明高效的解决方案。有什么想法吗?
2个回答

19

只需使用正则表达式!现在支持可变数量的空格。

import re
my_string = "my phone number is 12 345 6789"
my_string = re.sub(r'(\d)\s+(\d)', r'\1\2', my_string)

你能否将其扩展到 r'(\d)(\s+)(\d)', r'\1\3' 以允许多个空格? - inspectorG4dget
1
@inspectorG4dget 它是否需要成为一个捕获组?你不能只是这样做 r'(\d)\s+(\d)', r'\1\2' 吗? - Morgan Thrapp
这段代码无法处理像 1 2 3 4 5 6 789 这样的情况。它会变成 12 34 56 789 - roronoa

9

只是另一种使用回顾/预测并直接删除空格而不是取出数字并将其放回的正则表达式方法:

>>> re.sub('(?<=\d) (?=\d)', '', my_string)
'my phone number is 123456789'

我喜欢它,但不得不承认它有点长而且慢:

>>> timeit(lambda: re.sub('(?<=\d) (?=\d)', '', my_string))
1.991465161754789
>>> timeit(lambda: re.sub('(\d) (\d)', '$1$2', my_string))
1.82666541270698

你能不能只使用 (?<=\d)\s+ - Stofke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接