使用列表中的子匹配添加开始和结束列

时间:2013-12-17 08:57:52

标签: regex list vim match

我的文字:

Petro 2013 mytext, 2013, Pimme 2012  2012  2011  2013

我的代码:

let myhits = []
1s/mytext,\s\zs\d\+\ze,\s/\=add(myhits,submatch(0))[-1]/g

此代码将第二'2013'添加到myhits中 输出:

myhits = ['2013']

我的问题是:
是否可以在列表中添加每个子匹配的开始和结束的列位置?
期望的输出:

myhits = ['20-23_2013']

1 个答案:

答案 0 :(得分:1)

我打破了行中的逻辑,如果你愿意,你可以把它打包成一行:

let g:myhits=[]
function! DoIt()

    let s = getline('.')
    let re = 'mytext,\s\zs\d\+\ze,\s'
    let b = match(s,re)
    let m = matchstr(s,re)
    if b>=0 
        call add(g:myhits, b+1 . ('-'. (b+len(m) ).'_'.m))
    endif
endfunction

它将预期的字符串添加到列表中。