gpt4 book ai didi

regex - 是否存在 submatch(0) 在 vi​​m 正则表达式替换中不起作用的情况?

转载 作者:行者123 更新时间:2023-12-02 21:13:13 25 4
gpt4 key购买 nike

我大致有以下源数据,我尝试通过 vim 的正则表达式搜索和替换来执行全局替换:

      "text": [{
"uid": "...",
"left": 50,
"top": 715,
"minSize": 60,
"maxSize": 70,
"width": "345px",
"align": "center",
"font": "...",
"forbidden": "",
"border": true,
"printType": 0
}

我的搜索/替换字符串如下所示:

:%s/"left":\(\d\+\)/"left":\=submatch(1)*0.66/g

实际上,在所有情况下,我都在尝试将 "left" 属性减少到其当前值的 66%。

不幸的是,结果字符串变成:

      "text": [{
"uid": "...",
"left": =submatch(1)*0.66,
"top": 715,
"minSize": 60,
"maxSize": 70,
"width": "345px",
"align": "center",
"font": "...",
"forbidden": "",
"border": true,
"printType"

因此,我得到的不是 "left": 33,而是 "left": =submatch(1)*0.66

起初,我以为这是因为我使用了=submatch(0)。但是,切换到 =submatch(0) 并没有解决问题,只是在替换的字符串中返回 =submatch(0)

是否会出现表达式无法正确计算的情况?

最佳答案

在替换中使用表达式时,替换必须以 \= 开头,然后将其余部分作为表达式进行计算。在你的例子中,你只是转义了等号。

最简单的方法是使用 \zs 在数字之前开始匹配

:%s/"left": \zs\d\+/\=submatch(0) * 0.66

然后对整个匹配使用submatch(0),在本例中只是数字。

关于regex - 是否存在 submatch(0) 在 vi​​m 正则表达式替换中不起作用的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32301379/

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