gpt4 book ai didi

regex - 用正则表达式替换时,如何将数字附加到匹配组的末尾?

转载 作者:行者123 更新时间:2023-12-05 09:36:46 26 4
gpt4 key购买 nike

这是针对 Visual Studio 代码的,但我不确定它的相关性如何。

这是我的正则表达式:cost:(\d\d)

我正在尝试将该数字乘以 100。例如,将 cost:25 更改为 cost:2500

但是如果我尝试这个替换,它认为我要的是组 #100,而不是组 #1 和两个零:cost:$100 更改 cost:25cost:$100。如果我在两个零之后放置一个空格,它将替换为:cost:25 00。有没有办法告诉正则表达式引擎组名在哪里停止?

我试过用 cost:${1}00 替换,但这不起作用。它将它更改为 cost:${1}00:

enter image description here

最佳答案

关于 VS Code 1.51.1 ,此解决方案适用于替换(当前文件)和替换文件:

  • 使用 $0引用整场比赛:

    搜索:cost:\d\d

    替换:$000

如评论中所述,这两种方法仅适用于替换(当前文件)但不适用于文件中的替换:

  • 使用 $&引用整场比赛:

    搜索:cost:\d\d

    替换:$&00

  • 使用 $1引用第一个捕获组:

    搜索:cost:(\d\d)

    替换:cost:$100

    对于常规的Replace,替换字符串解析规则与JavaScript相同。由于我们在正则表达式中没有 10 或 100 个捕获组,因此替换字符串被解析为 $1 (第 1 组中匹配的任何内容)后跟文字 00

    但是,对于在文件中替换,替换仅在 $1 后面只有一位数字时有效。 (cost:$10)。一旦超过2位,则视为文字字符串替换

我尝试使用命名捕获组 - 虽然它们在搜索字段中被识别,但我无法在替换字符串中引用它。常见语法,例如 ${group}$<group>不起作用。


经过更多测试后,我发现了一些与文件中替换的实现方式有关的奇怪错误。

  • 这种带有命名捕获组的直接方法不起作用:

    搜索:cost:(?<n>\d\d)

    替换:cost:$<n>00

    但是我们可以通过混合命名捕获组替换和编号组替换来哄它工作:

    搜索:cost:(?<n>\d\d)()

    替换:cost:$2$<n>00

    我们也可以应用这个技巧来让编号组替换工作:

    搜索:cost:(\d\d)()

    替换:cost:$2$100

    当替换字符串只包含一个替换标记时,似乎存在错误。

关于regex - 用正则表达式替换时,如何将数字附加到匹配组的末尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64981403/

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