gpt4 book ai didi

python正则表达式替换所有数字,除非它们是子字符串的一部分

转载 作者:行者123 更新时间:2023-12-05 03:17:11 24 4
gpt4 key购买 nike

我想删除所有数字,除非这些数字构成特殊子串之一。在下面的示例中,我应该跳过数字删除的特殊子字符串是 1s、2s、s4、3s。我想我需要使用负前瞻

s = "a61s8sa92s3s3as4s4af3s"
pattern = r"(?!1s|2s|s4|3s)[0-9\.]"
re.sub(pattern, ' ', s)

据我了解,上面的模式是:

  • 从末尾([])开始匹配包括小数在内的所有数字
  • 只有当我们没有匹配 ?! 之后的模式时才这样做。
  • 分别是 1、2、s4 或 3 (| = OR)

在您尝试之前,一切都有意义。上面的示例 s 返回 a 1s sa 2s3s as s af3s,这表明所有排除模式都有效,除非数字位于特殊子字符串的末尾,在哪种情况下它仍然匹配?!

我相信这个操作应该返回 a 1s sa 2s3s as4s4af3s,如何修复我的模式?

最佳答案

你可以使用

import re
s = "a61s8sa92s3s3as4s4af3s"
pattern = r"(1s|2s|s4|3s)|[\d.]"
print( re.sub(pattern, lambda x: x.group(1) or ' ', s) )
# => a 1s sa 2s3s as4s4af3s

参见 Python demo .

详细信息:

  • (1s|2s|s4|3s) - 第 1 组:1s2ss43s
  • | - 或者
  • [\d.] - 一个数字或点。

如果第 1 组匹配,则第 1 组值是替换值,否则,它是一个空格。

关于python正则表达式替换所有数字,除非它们是子字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74240336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com