あなたは、あなたが言ったことに対応するものではない、そこにいくつかの厄介なものがあります。あなたが持っているものを分解し、おそらくそこからあなたが望むものに向かって作業することができます。
$txt=~s/\r//s; # removes a single \r from the line. Did you mean to use g on this one?
$txt=~s/[\t ]\n//s; # match a single \t OR space right before a \n, and remove.
$txt=~s/ +/ /gs;# match at least 2 spaces, replace with a single space
$txt=~s/\t+/ /gs;# match at least 2 \t, replace with a single space
$txt=~s/\n /\n/s;# remove a space immediately following a \n
$txt=~s/\t /\t/s;# remove a space immediately following a \t
$txt=~s/\n+/ /gs;# match at least 2 \n, replace them all with a single space
私はあなたが達成したいと思っているものはまったくありません。
私はあなたがしたいことについて正直に不明です。私があなたの記載した意図を読んでいるように、私はすべてのダブルタブを1つのタブで置き換えたいと思っていたでしょう、すべてのダブル改行と1行改行、そしてすべてのダブルスペースとシングルスペース。私はさらに、実際にダブルスだけでなく、それらの文字を実際に実行したいと推測します。ここでは私がちょうど言ったことのための正規表現は、うまくいけばそれはあなたに何かを与える: (私もすべて\ rを削除しました)。あなた未遂の正規表現は、私はあなたの規定の欲求を読む方法と一致していないようだということを考えると
$txt=~s/\r//gs;# remove all \r
$txt=~s/\t+/\t/gs;# replace all runs of > 1 tab with a single tab
$txt=~s/\n+/\n/gs;# replace all runs of > 1 \n with a single \n
$txt=~s/ +/ /gs;# replace all runs of > 1 space with a single space
、私はあなたが本当にここに何をしたいかについて、いくつかの曖昧さがあることを疑います。正規表現がより明確になるようにするために、達成しようとしていることについてさらに考えたいと思うかもしれません。
これは少し不明です。 "ab TABcTABTAB \ n \ n"のような行がある場合は、結果として何を望みますか?私は上記の "ab c \ n"と読んでいますか? – DVK
言い換えれば、あなたがしたいことは間違いありません:1.ラインの途中のすべての空白(スペースやタブなど)が1つのスペースに変換されていますか? 2.行頭のすべての空白が削除されます(改行を除く)? 3.完全に空の行を削除しますか? – DVK
正確に。 これはおそらく役に立ちます: $ txt = "\ n空になった行を削除します。" "\ n \ nダブルスペース、ダブルスペース、終了スペースを削除してください。\ n" "\ nと先頭。タブ\ t \ n"と同じです。 "\ tタブの先頭と複数のタブで\ t \ t \ t、最後に改行:\ n \ n \ n";最後に、実際に線を分割する3 \ n以外のすべての混乱を取り除かなければならない。したがって、ゴミ箱のテキストは、余分なnl、タブ、またはスペースなしで簡単に読めるようになります。 – Scoox