gpt4 book ai didi

regex - 如何使用 Neovim 正则表达式进行单独选择(两个字符不连续)?

转载 作者:行者123 更新时间:2023-12-02 01:37:02 31 4
gpt4 key购买 nike

我正在尝试替换文本文件中的所有字符串,这些字符串被单引号包围并以 @ 结尾,后跟任何数字,然后是任何其他字母或 #(s) 的任意组合,如下所示:

'package@1.1.k'
'otherpackage@14'
'anotherpackage@7.8'

我希望选择单引号并像这样删除它们:

export MYVAR="/dir/'package@1.1.k':$MYVAR" 

到:

export MYVAR="/dir/package@1.1.k:$MYVAR"

在整个文件中。我想出了一种方法来删除两个单独命令中的前面的单引号和前面的单引号(使用 vim 的 zsze,类似于正面和负面的环视):

:%s/'.*@.[0-9]*.*\zs'//g 
:%s/\zs'\ze.*@.[0-9]*.*//g

但是,我对在单个操作中完成它感到好奇,因为我想了解更多关于使用 Neovim 的信息,并将答案应用到 future 的操作中。

我实际上在使用 Neovim,如果它带有与此相关的任何附加功能。

最佳答案

你需要使用

%s/'\([^@'0-9]*@[0-9][^']*\)'/\1/g

详细信息:

  • ' - 单引号
  • \( - 捕获组的开始
    • [^@'0-9]* - 除了 @' 和数字
    • 之外的零个或多个字符
    • @ - @ 字符
    • [0-9] - 一个数字
    • [^']* - 除了 ' 字符之外的零个或多个字符
  • \)' - 捕获组结束。

替换为 \1,第 1 组反向引用/占位符。

关于regex - 如何使用 Neovim 正则表达式进行单独选择(两个字符不连续)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72194002/

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