首页 > 解决方案 > 如何使用python删除数字之间的空格?

问题描述

我想使用 python 删除数字之间的空格。例如,

my_string = "take take , mouth ? 1 unit 1     2  3  1 mg 0 . 1 mg 1 . 1 mg 1 / 2 take . 5 unit and 00 . 5 unit"

我的预期输出是,

"take take , mouth ? 1 unit 1231 mg 0.1 mg 1.1 mg 1/2 take 0.5 unit and 0.5 unit"

注意:小数点前加了一个零,去掉了一个。

这些我都试过了

正则表达式仅删除数字之间的空格

如何使用单个 re.sub 删除数字之间的多个空格

先感谢您。但这些不适用于以空格分隔的单个数字。

标签: pythonregexnumbersspace

解决方案


您不仅需要删除数字之间的空格,还需要删除.(点)和/(斜线),这可以通过以下方式完成

import re
my_string = "take take , mouth ? 1 unit 1     2  3  1 mg 0 . 1 mg 1 . 1 mg 1 / 2 take . 5 unit and 00 . 5 unit"
no_spaces = re.sub(r'(?<=[0-9./])\s+(?=[0-9./])','',my_string)
print(no_spaces)

输出

take take , mouth ? 1 unit 1231 mg 0.1 mg 1.1 mg 1/2 take .5 unit and 00.5 unit

\s表示任何空格(即不仅是空格,还包括例如),如果您确定只会遇到空格\t,您可以选择将其更改为。...和...是肯定的后向和肯定的前瞻断言,这些是零长度断言,用于确保仅在数字/点之后和数字/点之前匹配空格,而不匹配所述数字/点。当在内部使用时,它是字面的,因此不需要转义。 (?<=)(?=).[].

.要在后跟数字之前添加前导零,您可以再次re.sub使用零长度断言,如下所示

leading_zeros = re.sub(r'(?<=\s)(?=\.\d+)', '0', no_spaces)
print(leading_zeros)

输出

take take , mouth ? 1 unit 1231 mg 0.1 mg 1.1 mg 1/2 take 0.5 unit and 00.5 unit

说明:0在空格 ( \s) 和文字点 ( \.) 之间放置一个或多个 ( +) 数字 ( \d)。注意.在外面使用时需要转义[].

有关使用的功能的进一步讨论,请阅读re文档


推荐阅读