2011-11-03 8 views
3

これはPerl: add character to begin of a lineへのフォローアップの質問の一種です。各行の先頭に空白を追加します(1つの文字列内)

状況
私は改行(\n)の未知数を含む合理的な長い文字列$strを持っている既存のPerlスクリプト内。文字列の最後に改行があります。 (この場合は3)

$str = " Hello\n World.\n How is it going?" 

:私は、文字列内の各行頭の空白の特定の(一定の)数を追加したい

$str = "Hello\nWorld.\nHow is it going?" 

通報
最初のアプローチ 私の最初のアプローチは次のとおりでした。RegEx

$str =~ s/(.*?\n)/ \1/g; 

そして新しい行で終了されていない最後の行、

$str =~ s/(.*)\n(.*)?$/\1\n \2/g; 

ウィッシュ
ファーストをキャッシュします。上記の行は完全に動作し、私が意図した通りに動作します。しかし。私は、RegExは強力であり、私はかなり確信しています.1つの短いRegExで同じことをすることができます。残念ながら、私はまだこれを達成することができませんでした。 (それは非常に複雑すぎると思っている可能性が非常に高いです。)

この問題はどのような可能性がありますか?
ありがとうございます。

答えて

4

マッチは、おそらく、代わりに各ラインのを開始:

$str =~ s/^/ /mg; 

perlreからノート:

  • ^ - 行の先頭にマッチします。
  • m - 文字列の複数の行を処理して、^$のマッチラインの開始と終了を文字列内のどこでも開始できます。
  • g - グローバル - 見つかったすべての一致に適用されます。
+0

ありがとうございます。フラグ「m」が欠落していました。上記以外の質問:複数のスペースの省略形はありますか?私は5つ以上のスペースを打ち込む(またはハードコード)したくない。 –

+0

@ T.K。 - あなたは次のようにすることができます: '$ $ indent = '' x 5; $ str =〜s/^/$ indent/mg; 'これは' $ indent'に5つのスペースを割り当て、置換に使用します。 –

+0

それは一つの選択肢、はいです。しかし、RegExの 'multiplicators'を使うことはできません: '{n}'? –

0

OPは改行文字が文字列の一部であることを意味すると思いますか?この場合、正規表現は

$subject =~ s/((?<=^)|(?<=\\n))/ /g; 

となります。

説明:

" 
(    # Match the regular expression below and capture its match into backreference number 1 
        # Match either the regular expression below (attempting the next alternative only if this one fails) 
     (?<=   # Assert that the regex below can be matched, with the match ending at this position (positive lookbehind) 
     ^   # Assert position at the beginning of the string 
    ) 
    |    # Or match regular expression number 2 below (the entire group fails if this one fails to match) 
     (?<=   # Assert that the regex below can be matched, with the match ending at this position (positive lookbehind) 
     \\n    # Match a line feed character 
    ) 
) 
" 

それはhereの作業を参照してください。

+0

これは有線です。私のスクリプトでは、これは動作していません。文字列全体の先頭に空白が追加されますが、改行の後には追加されません。 –

+0

@ T.K。あなたはそれが正常に動作しているのを見た? :)あなたがコピーすればうまくいくはずです。私はあなたの場合に何が間違っているのか分からない:) – FailedDev

関連する問題