在vim中操纵字符串

Rem*_*man 0 regex string vim

在我看来,Vimscript没有很多用于操作字符串的功能.
我经常使用matchstr(),substitute()和strpart().
也许还有更多.

什么是删除下一个字符串"a"中的亚麻布之间的所有文本的最佳方法?

let a = "\%8l............\|\%11l..........\|\%17l.........\|\%20l...." --> etc 
Run Code Online (Sandbox Code Playgroud)

我想只保留数字并将它们放在一个列表中.
(亚麻布之间的文字可能不同)

编辑:
输出我想获得:
['8','11','17','20'] - >等

Luc*_*tte 5

你在寻找split()

echo split(a, '[^0-9]\+') 
Run Code Online (Sandbox Code Playgroud)

编辑:

鉴于新约束:只有来自的数字\%d\+l,我会做:

echo map(split(a, '|'), "matchstr(v:val, '^%\\zs\\d\\+\\zel')")
Run Code Online (Sandbox Code Playgroud)

注意:你的vim变量格式不正确,只使用一个反斜杠,你需要用单引号编写你的字符串.使用双引号,这里需要两个反斜杠.所以,随着

let b = '\%8l............\|\%11l..........\|\%17l.........\|\%20l....'
Run Code Online (Sandbox Code Playgroud)

它成为了

echo map(split(b, '\\|'), "matchstr(v:val, '^\\\\%\\zs\\d\\+\\zel')")
Run Code Online (Sandbox Code Playgroud)