可能重复:
Split line with perl
我有一句话:
regizor: Betty Thomas Distribuţia: Sandra Bullock (Gwen Cummings) Viggo Mortensen (Eddie Boone) Dominic West (Jasper) rendező: David Mamet, Robert Elswit szereplő(k): Chiwetel Ejiofor (Mike Terry) Alice Braga (Sondra Terry) Emily Mortimer (Laura Black)
我想用perl分割:
regizor: Betty Thomas
Distribuţia: Sandra Bullock (Gwen Cummings) Viggo Mortensen (Eddie Boone) Dominic West (Jasper)
rendező: David Mamet Robert Elswit
szereplő(k): Chiwetel Ejiofor (Mike Terry) Alice Braga (Sondra Terry) Emily Mortimer (Laura Black)
答案 0 :(得分:7)
怎么样:
my @splitBits = split /(?=\S+: )/, $str;
这会在每次出现“word”(一系列非空格字符)之前分割字符串,然后是冒号和空格(并且不会在开头产生空字段)。
答案 1 :(得分:5)
您可以使用以下正则表达式:
$line =~ s/(\S+:)/\n$1/sg;
这说“找到任何非空格字符(\ S),至少一次(+),后面有一个冒号,并在它前面添加一个新行。”
你会得到一个领先的换行符,你可以轻松砍掉。
当我在你的线路上运行时,我得到了
regizor: Betty Thomas
Distribuţia: Sandra Bullock (Gwen Cummings) Viggo Mortensen (Eddie Boone) Dominic West (Jasper)
rendező: David Mamet, Robert Elswit
szereplő(k): Chiwetel Ejiofor (Mike Terry) Alice Braga (Sondra Terry) Emily Mortimer (Laura Black)
答案 2 :(得分:2)
perl -p -e 's/ ([^ ]*?:)/\n$1/g' <file.txt
给出:
regizor: Betty Thomas
Distribu.ia: Sandra Bullock (Gwen Cummings) Viggo Mortensen (Eddie Boone) Dominic West (Jasper)
rendez.: David Mamet, Robert Elswit
szerepl.(k): Chiwetel Ejiofor (Mike Terry) Alice Braga (Sondra Terry) Emily Mortimer (Laura Black)