如何在正则表达式(vim)中表达“以下未知数量的字符中有指定符号”?

如何在正则表达式(vim)中表达“以下未知数量的字符中有指定符号”?

我的 markdown 文件中有很多 python 代码示例,它们应该以>>>符号开头。

所以我写了一个 vim 函数来完成这项工作:

function AddShellPrompt() range
    let lnum = a:firstline
    while lnum <= a:lastline
        let replaced_line = substitute(getline(lnum), '^\s\+', '&>>>', '')
        call setline(lnum, replaced_line)
        let lnum += 1
    endwhile
endfunction

问题是,对于像这样的原始文本:

pow(2, 3)
8

我只需要添加>>>之前pow(2, 3),但不需要之前8。所以我需要扩展我的正则表达式。
我想到如果我只添加>>>包含任何字符的行+-*/%(=
我可以获得相当不错的结果(尽管并不完美)。

但问题是,如何编写正则表达式(尤其是在 vim 中)来表达给定集中的某些字符已出现在当前行中?

答案1

vim正则表达式引擎支持括号表达式,您可以将一类字符定义为方括号括起来的字符序列[...]

/[+\-*/%(=]/

将匹配这些字符中的任何字符(您需要转义-,它定义了字符之间的范围,以按字面匹配它)

要检查当前行是否包含任何字符集:

if getline(".") =~ '[+\-*/%(=]'
  echo "Match"
endif

相关内容