使用正则表达式用相同长度的不同字符序列替换字符序列

时间:2018-08-23 21:30:34

标签: regex

我有一个以空格开头的字符串。我想用相等数量的破折号-替换前导空格。我不想替换字符串中其他地方可能出现的任何其他空格。

如果我使用/^\s*/-/,它将仅替换为一个破折号。如果我使用/^\s/-/,它只会用破折号代替第一个空格。如果删除锚点/\s/-/,它将替换字符串中所有出现的空格,这是不可接受的。

我的字符串通常如下所示:

<n-leading-spaces><a-non-space-character><remaining-characters>

示例(添加了管道以显示边界)

|   ajfn ssfdjn ng jnv sjfj%nv sjfj n     s ;sn     |

替换后(添加管道以显示边界)

|---ajfn ssfdjn ng jnv sjfj%nv sjfj n     s ;sn     |

注意:我不能使用任何代码段。我只想知道是否可以仅使用正则表达式模式来完成此操作。 (请原谅我的格式,因为我是Markdown的新手。欢迎格式更正)

1 个答案:

答案 0 :(得分:1)

您可以使用以下解决方案使用正则表达式将字符序列替换为长度相同的不同字符序列:

my $string = '    ajfn ssfdjn ng jnv sjfj%nv sjfj n     s ;sn     ';
$string =~ s/^(\s+)/"-" x length($1)/eg;
print $string;

Returns '----ajfn ssfdjn ng jnv sjfj%nv sjfj n     s ;sn     '