Skip to main content
 首页 » 编程设计

python之如何替换所有数字,python 中的特定数字除外

2025年05月04日14fff_TT

我有一个字符串列表,其中一些包含数字。

例如:

  • abc123 def3464
  • 你好32 再见64
  • 一些数字 1254324

我想清理这些字符串中的所有数字,但保留特定数字,例如 32 和 64,因此清理将返回以下内容:

  • abc def
  • 你好32 再见64
  • 一些数字

请注意,在第一个示例 (def3464) 中,数字 64 存在,但不是单独存在的,因此应将其删除。

有什么想法吗?

请您参考如下方法:

即使没有 lambda,您也可以完成任务,仅依靠 正则表达式功能(尽管正则表达式更复杂)。

所需的正则表达式是:(?:(32|64)|\d+)(?=\D|$)。详情:

  • (?: - 非捕获组的开始,需要作为容器 寻找替代品。
  • (32|64) - 第一个替代方案(和捕获组),要么 32 或 64。
  • | - 或者。
  • \d+ - 第二种选择,数字序列。
  • ) - 非捕获组结束。
  • (?=\D|$) -(共同)结尾部分(在两种选择之后)- 正 查找非数字字符或字符串结尾。

第一个替代项(和捕获组)匹配 32 或 64 第二种选择(没有捕获组)匹配任何其他数字。

替换表达式为\1(替换匹配的内容为 第一个捕获组)。

所以,如果second备选匹配,则第一组匹配 nothing,因此不会将任何内容替换为当前匹配项。

为了演示它是如何工作的,请运行示例程序:

import re 
src = ['abc123 def3464', 'hello32 goodbye64', 'some numbers 1254324'] 
print(src) 
result = [re.sub(r"(?:(32|64)|\d+)(?=\D|$)", r"\1", i) for i in src] 
print(result) 

如果您对最后输出字符串中的尾随空格不满意, 在 re.sub(...) 之后添加 .strip()。