【问题标题】:How to remove multiple spaces between numbers using a single re.sub如何使用单个 re.sub 删除数字之间的多个空格
【发布时间】:2019-02-26 13:38:37
【问题描述】:

我想使用单个 re.sub 删除数字之间的空格。使用以下命令:

import re

print(re.sub('([0-9,.]) ([0-9,.])','\\1\\2',str("11 222")))

print(re.sub('([0-9,.]) ([0-9,.])','\\1\\2',str("11 222 33")))

print(re.sub('([0-9,.]) ([0-9,.])','\\1\\2',str("11 222 33 4")))

print(re.sub('([0-9,.]) ([0-9,.])','\\1\\2',str("11 222 33 4 55")))

print(re.sub('([0-9,.]) ([0-9,.])','\\1\\2',str("11 222 33 4 55 6")))

print(re.sub('([0-9,.]) ([0-9,.])','\\1\\2',str("11 222 33 4 55 6 77")))

但是,如果有多个连续数字,我只能删除空格:

11222
1122233
11222334
11222334 55
11222334 556
11222334 556 77

但是如何去掉只有一个数字的空格,让命令的结果像

print(re.sub('([0-9,.]) ([0-9,.])','\\1\\2',str("11 222 33 4 55 6 77")))

1122233455677

?

【问题讨论】:

标签: python regex replace


【解决方案1】:

尝试使用环视来检测空格周围的数字:

print(re.sub('(?<=\\d) (?=\\d)','',str("11 222 33 4 55 6 77")))

1122233455677

这里的想法是,对于每个空间,我们向后看并断言存在一个数字,并且我们向前看并断言一个数字存在。

请注意,此答案不会删除可能出现在字符串两端的空格,但这些空格又不在数字之间。

【讨论】:

  • 这个解决方案似乎有效!所以我不能使用具有连续匹配实例的重叠组。这种使用前瞻而不是重叠组的不同方法完全可以按预期工作。
  • @Heikki 您当前方法的局限性在于,它仅在所有空间都被两个或更多数字的岛屿包围时才有效(可能除了开始和结束)。这是因为一旦正则表达式引擎消耗了一个数字,它就不能被重用。 Lookarounds 在这里是一个不错的选择,因为它们断言但不消耗,因此在概念上可以使用相同的数字两次。
  • 为了完整起见,问题的正则表达式暗示我也想去掉数字和分隔符之间的空格。因此,我最终得到了以下正则表达式:re.sub('(?&lt;=[0-9,.]) (?=[0-9,.])','',"11 . 222 33 4 55 6 77")
  • 我将问题编辑为包含数字和小数分隔符,但排除其他字符。
  • @Heikki 不错。在许多其他人回答之后,您不应该更改您的问题。
【解决方案2】:

有几种表达方式可以掌握数字。在这种情况下,我在ref 中找到了最简单的代码。它可以摆脱其他角色。

print(re.sub(r'\s','',str("11 222 33 4 55")))

【讨论】:

  • 我想避免删除除数字和小数分隔符以外的空格。
  • 这应该适用于点符号。 print(re.sub('( )(\d)','\\2',"11 222 33 4 55 . 6 77"))
猜你喜欢
  • 2021-05-02
  • 2019-09-25
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
相关资源
最近更新 更多