【问题标题】:How do I repeat a character n times in a string?如何在字符串中重复一个字符 n 次?
【发布时间】:2009-03-22 08:23:30
【问题描述】:

我正在学习 Perl,所以请耐心等待这个菜鸟问题。

如何在一个字符串中重复一个字符 n 次?

我想做如下的事情:

$numOfChar = 10;

s/^\s*(.*)/' ' x $numOfChar$1/;

【问题讨论】:

  • 您是否收到任何错误消息?

标签: perl


【解决方案1】:

默认情况下,替换将字符串作为要替换的部分。要在替换过程中执行代码,您必须使用 e 标志。

$numOfChar = 10;

s/^(.*)/' ' x $numOfChar . $1/e;

这会将$numOfChar 空格添加到文本的开头。要对文本中的每一行执行此操作,请使用 -p 标志(用于快速、单行处理):

cat foo.txt | perl -p -e "$n = 10; s/^(.*)/' ' x $n . $1/e/" > bar.txt

或者如果它是较大脚本的一部分,请使用 -g-m 标志(-g 用于全局,即重复替换,-m 使 ^ 在每行的开头匹配):

$n = 10;
$text =~ s/^(.*)/' ' x $n . $1/mge;

【讨论】:

    【解决方案2】:

    你的正则表达式可以写成:

    $numOfChar = 10;
    
    s/^(.*)/(' ' x $numOfChar).$1/e;
    

    但是 - 你可以这样做:

    s/^/' ' x $numOfChar/e;
    

    或者根本不使用正则表达式:

    $_ = ( ' ' x $numOfChar ) . $_;
    

    【讨论】:

    • 请注意,此答案不再适用,因为在给出此答案后,chappar 在他的问题中添加了 \s*。
    • 目前没有一个答案真正适用。但它可以很容易地修复。只需更改: s/^/' ' x $numOfChar/e;成:s/^\s*/' ' x $numOfChar/e;
    【解决方案3】:

    你是对的。 Perl 的x 运算符重复一个字符串多次。

    print "test\n" x 10; # prints 10 lines of "test"
    

    编辑:要在正则表达式中执行此操作,最好(也就是对维护人员最友好)将值分配给另一个变量。

    my $spaces = " " x 10;
    s/^\s*(.*)/$spaces$1/;
    

    有很多方法可以在没有额外变量的情况下做到这一点,但如果你这样做的话,它只是我的 0.02 美元,它会更容易维护。

    编辑:我修复了我的正则表达式。抱歉我第一次没看清楚。

    【讨论】:

    • 那行不通。我认为它只在 print 语句中起作用
    • 我正在尝试这样的事情。 s/^(.*)/'p' x $numOfChar/;我修改了我的问题
    猜你喜欢
    • 2014-04-17
    • 2022-08-19
    • 2015-10-16
    • 2010-09-21
    • 2018-07-04
    • 2013-10-12
    • 2013-07-27
    • 1970-01-01
    相关资源
    最近更新 更多