我想删除所有的数字,除非这些数字组成了一个特殊的子字符串。在下面的例子中,我应该跳过数字删除的特殊子字符串是1 s,2s,s4,3s。我想我需要使用负前瞻
s = "a61s8sa92s3s3as4s4af3s"
pattern = r"(?!1s|2s|s4|3s)[0-9\.]"
re.sub(pattern, ' ', s)
以我的理解,上面的模式是:
- 从末尾([])开始匹配所有数字,包括小数
- 只有在我们没有匹配的模式后才这样做吗?!
- 其为1 s、2s、s4或3s(|=或)
上面的示例s
返回a 1s sa 2s3s as s af3s
,这意味着所有的排除模式都在工作,除非数字位于特殊子字符串的末尾,在这种情况下,它仍然匹配?!
我相信这个操作应该返回a 1s sa 2s3s as4s4af3s
,如何修复我的模式?
2条答案
按热度按时间kr98yfug1#
您可以使用
请参阅Python demo。
(1s|2s|s4|3s)
-组1:1s
、2s
、s4
或3s
|
-或[\d.]
-数字或点。如果Group 1匹配,则Group 1值为替换值,否则为空格。
n7taea2i2#
尝试(regex101):
印刷品: