drb*_*sen 2 regex vim backreference
我试图在vi中编写一个正则表达式来匹配任何空格字符后跟任何数字.然后,在每次匹配时,在空格和数字之间插入一个美元符号.这是一个例子:
A1234 12 14 B1234
B1256 A2 14 C1245
C1234 34 D1 1234K
Run Code Online (Sandbox Code Playgroud)
正确的正则表达式会产生这个:
A1234 $12 $14 B1234
B1256 A2 14 C1245
C1234 $34 D1 $1234K
Run Code Online (Sandbox Code Playgroud)
我意识到我需要使用后向引用,但我似乎无法编写正确的正则表达式.这是我的尝试:
:'<,'>/(\s\d)/\s\1\$/g
Run Code Online (Sandbox Code Playgroud)
此外,我关闭了Vim的默认正则表达式模式(vnoremap / /\v).
谢谢您的帮助.
你需要转义括号,使它们作为分组而不是文本中的实际匹配,而不是逃避$.像这样:
:%s/\(\s\)\(\d\)/\1$\2/g
Run Code Online (Sandbox Code Playgroud)
这对我在vim中起作用(使用标准魔术设置).
编辑:刚刚意识到你的非标准正则表达式设置会让你逃脱"反过来".但是,我认为,诀窍是使用两组.使用您的设置,这应该工作:
:%s/(\s)(\d)/\1$\2/g
Run Code Online (Sandbox Code Playgroud)
使用反向引用并非不可避免.可以创建一个模式来匹配空白字符和数字之间的零宽度文本,并用$符号替换该空间隔.
:'<,'>s/\s\zs\ze\d/$/g
Run Code Online (Sandbox Code Playgroud)
(请参阅:help /\zs和:help /\ze有关原子改变匹配的边界的信息.)
| 归档时间: |
|
| 查看次数: |
4249 次 |
| 最近记录: |