誰か正規表現を。。。

教えてくれ。。。

  • 空白文字が任意個続くときは取り除く
    • 空白文字の集合には改行文字も含まれるってことは分かったんだけど、改行はちょっとこの集合に含まないで考えたい
  • 取り除いた後の行頭に「-」を付ける
  • 改行だけの行に対しては処理しない

例えば下のやつを実行すると

#!/usr/bin/perl

use strict;
use warnings;

while(<DATA>){
  s/(^\s*)(.+)$/-$2/;
  print;
}

__DATA__
  回転の不定性
  因子負荷量の推定量に直交行列(自分に自分をかけたら単位行列)をかけたものも因子負荷量になってしまう
まあ、そんなわけで回転させたものもおkということ

  これを逆に利用してやろう
  P186
  因子分析をしたけど結果の解釈がしずらいものがある
  →回転させると結果が分かりやすくなる

こういう風になって返ってきてほしい。

-因子負荷量の推定量に直交行列(自分に自分をかけたら単位行列)をかけたものも因子負荷量になってしまう
-まあ、そんなわけで回転させたものもおkということ

-これを逆に利用してやろう
-P186
-因子分析をしたけど結果の解釈がしずらいものがある
-→回転させると結果が分かりやすくなる

ワンライナーだとこういう感じ。

perl -pe 's/(^\s*)(.+)$/-$2/;'

書いて、自分のやつだとうまく動いたんだけど、動かない場合とかありそう&もっとかっこいい方法がありそう、ということで誰か教えてください。。

追記
odzさんから即効解答いただいてしまった。

perl -pe 's/^\s+(?=\S)/-/'

「look-ahead assertion」というやつらしい。ふくろう本か404 Blog Not Found:regexp - (?=lookahead) and (?<=lookbehind) assertionsを見るとよさげ。