我有一个像这样的字符串
"Name : somedata,123 Name : somedata1,234 Name :somedata3,345"
我需要将数据拆分到"Name "
发生的下一行
我需要这样的最终输出:
Name :somedata,123
Name :somedata1,234
Name :somedata3,345
请建议。谢谢。
答案 0 :(得分:4)
您可以使用后视和前瞻替换:如果前面有任何位置(即不是最开头),后跟Name
,则插入换行符:
my $string = "Name : somedata,123 Name : somedata1,234 Name :somedata3,345";
$string =~ s/(?<=.)(?=Name)/\n/g;
答案 1 :(得分:1)
您也可以使用split
和positive lookahead assertion
:
$string = "Name : somedata,123 Name : somedata1,234 Name :somedata3,345";
my @strings = split /(?=Name)/, $string;
print "<$_>\n" for @strings;
输出:
<Name : somedata,123 >
<Name : somedata1,234 >
<Name :somedata3,345>
注意,如果模式的宽度为零,则split在字符串的开头不匹配。出于这个原因,我们不需要断言背后的正面看法,以确保我们不是在开始。
另外,如果我们想要摆脱尾随空格,我们也可以在分割中做到这一点:
my @strings = split /\s*(?=Name)/, $string;