首页 文章

Vim Regex捕获组[bau - > byau:ceu - > cyeu]

提问于
浏览
94

我有一个单词列表:

bau
ceu
diu
fou
gau

我想将该列表转换为:

byau
cyeu
dyiu
fyou
gyau

我没有成功尝试这个命令:

:%s/(\w)(\w\w)/\1y\2/g

鉴于这不起作用,我需要更改什么才能使正则表达式捕获组在Vim中工作?

4 回答

  • 10

    解决此问题的一种方法是确保模式由转义括号括起来:

    :%s/\(\w\)\(\w\w\)/\1y\2/g
    

    稍微短一些(以及更多魔法)是使用 \v ,这意味着在除了 '0'-'9''a'-'z''A'-'Z' 和_1584814之外的所有ASCII字符之后的模式中具有特殊含义:

    :%s/\v(\w)(\w\w)/\1y\2/g
    

    见:

  • 166

    如果你没有错过),请在 \v 之前将Vim的正则表达式引擎转换为非常神奇的模式:

    :%s/\v(\w)(\w\w)/\1y\2/g
    
  • 37

    您也可以使用更短的模式:

    :%s/^./&y
    
    • %s 将模式应用于整个文件 .

    • ^. 匹配该行的第一个字符 .

    • &y 在模式后添加 y .

  • 23

    您还必须转义Grouping paranthesis:

    :%s/\(\w\)\(\w\w\)/\1y\2/g
    

    这就是诀窍 .

相关问题