如何替换所有数字,除了python中的特定数字?



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

例如:

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

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

  • 美国广播公司
  • 你好32 再见64
  • 一些数字

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

有什么想法吗?

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

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

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

第一个备选方案(和捕获组)匹配3264第二个备选方案(不捕获组)与任何其他数字匹配。

替换表达式1(将匹配项替换为 第一个捕获组)。

因此,如果第二个备选方案匹配,则第一组匹配什么都没有,因此没有任何东西作为当前比赛的替代品。

要演示其工作原理,请运行示例程序:

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()

您可以使用re.sub

import re
s = ['abc123 def3464', 'hello32 goodbye64', 'some numbers 1254324']
new_s = [re.sub('d+', lambda x:['', x.group()][x.group() in ['32', '64']], i) for i in s]

输出:

['abc def', 'hello32 goodbye64', 'some numbers ']

最新更新