如何使用 python 删除数字之间的空格?

How to remove spaces between numbers using 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"

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

这些我都试过了,

Regex to remove spaces between numbers only

提前谢谢你。 但这些不适用于以空格分隔的单个数字。

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

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表示任何白色space(即不仅space,而且例如\t),您可以选择将其更改为 如果你确定你只会遇到spaces。 (?<=...)(?=...) 是正后向断言和正先行断言,这些是零长度断言,用于确保仅匹配在 digit/dot 之后和 digit/dot 之前的 spaces, 没有 匹配表示 digits/dots。 .[] 中使用时是文字 . 因此不需要转义。

要在 . 之前添加前导零,后跟数字,您可以再次使用 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放在白色space(\s)和文字点(\.)之间,后跟一位或多位(+)数字(\d)。观察 .[].

之外使用时需要转义

有关已用功能的进一步讨论,请阅读 re docs