用perl分割线

时间:2011-09-26 15:57:12

标签: perl

  

可能重复:
  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)

3 个答案:

答案 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)