我试图在一定数量的单词之后在变量中添加一个新行。例如:如果我们有一个变量:
$x = "This a variable, start a new line here, This is a new line.";
如果我打印上面的变量
print $x;
我应该得到以下输出:
This is a variable,
start a new line here,
This is a new line.
如何从变量本身在Perl中实现这一点?
答案 0 :(得分:0)
我不同意“在一定数量的词之后”的公式。 请注意,第一个目标行有4个字,而其余2个有 每个5个字。
实际上你需要替换每个逗号并遵循以下顺序
空格(如果有),逗号和\n
。
所以直观的方法是:
$x =~ s/,\s*/,\n/g;
答案 1 :(得分:0)
最简单的方法是将字符串拆分为comma followed by a space
然后
使用comma followed by a newline
加入单词组。
my $x = "This a variable, start a new line here, This is a new line.";
print join(",\n", split /, /, $x) . "\n";
<强>输出强>
This a variable,
start a new line here,
This is a new line.
要解决一般how do I reformat this string with line breaks after n-columns?
问题,请使用Text::Wrap库(由@ikegami建议):
use Text::Wrap;
my $x = "The quick brown fox jumped over the lazy dog.";
$Text::Wrap::columns = 15;
# wrap() needs an array of words
my @words = split /\s+/, $x;
# Initial tab, subsequent tab values set to '' (think indent amount)
print wrap('', '', @words) . "\n";
<强>输出强>
The quick
brown fox
jumped over
the lazy dog.
答案 2 :(得分:-1)
您可能想要使用正则表达式。你可以这样做:
$x =~ s/^(\S+\s+){3}\K/\n/;
或者如果这是关于逗号而不是空格:
$x =~ s/^([^,]+,+){2}\s*\K/\n/;
(在这种情况下,我还删除了逗号之后的任何可能空格)
您还可以通过将其添加到变量中来单独配置所需的单词或逗号:
my $nbwords = 7; # add a line after the 7th word
$x =~ s/^(\S+\s+){$nbwords}\K/\n/;
现在,这将保留最后一个空格,因此您可能希望这样做:
my $nbwords = 7; # add a line after the 7th word
$nbwords--; # becomes 6 because there is another word after that we match as well
$x =~ s/^(\S+\s+){$nbwords}\S+\K\s+/\n/;
您应该学会使用Regexps,但只是为了解释上述内容: