微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式 – 如何在结果字符串中显示重复的匹配模式

如何在结果字符串中精确重复n个匹配的模式?

示例如果我有以下文本:

++ '[' -f /etc/bashrc ']'
++ . /etc/bashrc
+++ '[' '[\u@\h \W]\$' ']'
+++ '[' -z 'printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' ']'
+++ shopt -s checkwinsize
+++ '[' '[\u@\h \W]\$' = '\s-\v\$' ']'
+++ shopt -q login_shell
+++ '[' 506 -gt 199 ']'
++++ id -gn

现在我想用3个空格替换每个”,但它只能在模式的开头发生.我会使用:< range> s / ^< pattern> :%s / / / g,但如果它在文本的其余部分中有一个”,我就会搞砸它.

问题:
如何匹配每个开头并重复结果字符串中找到的相同计数?
预期:

^   ++$ -> ^         $
^   +++$-> ^            $
^   +$  -> ^      $

谢谢

试试这个:
:%s/^+*/\=repeat('   ',strlen(submatch(0)))/

submatch(0)包含在行开头匹配的所有匹配,strlen对它们进行计数.因此,对于行开头的每个加号,使用repeat插入三个空格.

欲获得更多信息:

:help sub-replace-expression
:help repeat()
:help submatch()
:help strlen()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐