正则表达式 - 将一个字符的序列替换为具有相同数量的另一个字符

bea*_*mit 13 regex replace

假设我有一个这样的字符串:

=====
Run Code Online (Sandbox Code Playgroud)

我想用这个替换它:

-----
Run Code Online (Sandbox Code Playgroud)

我只想替换它,如果它有超过一定数量的那个角色(我们会说> 3).

所以,这些应该是替代品:

=== -> ===
==== -> ----
===== -> -----
Run Code Online (Sandbox Code Playgroud)

该应用程序是我想用markdown替换markdown中的所有1级标题,而不更改嵌入的代码块.

我知道我可以这样做:

/=/-/g,但这匹配任何带有等号(if (x == y))的东西,这是不可取的.

或这个:

/===+/----/g,但这并不考虑原始匹配字符串的长度.

这可能吗?

yko*_*yko 10

Perl有可能:

my $string = "===== Hello World ====";
$string =~ s/(====+)/"-" x length($1)/eg;
# $string contains ----- Hello World ----
Run Code Online (Sandbox Code Playgroud)

Flag/e使Perl在s ///的第二部分执行表达式.您可以尝试使用oneliner:

perl -e '$ARGV[0] =~ s/(====+)/"-" x length($1)/eg; print $ARGV[0]' "===== Hello World ===="
Run Code Online (Sandbox Code Playgroud)