如何使用Perl拆分包含子字符串的字符串?

时间:2014-03-21 15:48:35

标签: perl split

我有一个像这样的字符串

"Name : somedata,123 Name : somedata1,234 Name :somedata3,345"

我需要将数据拆分到"Name "发生的下一行

我需要这样的最终输出:

Name :somedata,123
Name :somedata1,234
Name :somedata3,345

请建议。谢谢。

2 个答案:

答案 0 :(得分:4)

您可以使用后视和前瞻替换:如果前面有任何位置(即不是最开头),后跟Name,则插入换行符:

my $string = "Name : somedata,123 Name : somedata1,234 Name :somedata3,345";
$string =~ s/(?<=.)(?=Name)/\n/g;

答案 1 :(得分:1)

您也可以使用splitpositive 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;