2011-01-31 16 views
6

正規表現を使用して解析したい段落がありますが、残念ながら文章の間に空白が多く含まれることがあります。余分な余白をすべて取り除くことができるようにしたいのですが、わかりません...誰にでもアイデアはありますか?私は今まで見つかった唯一のものであるすべての空白を削除するのではなく、すべての単語の後に空白があり、すべての句読点+単語の後に空白があるように、通常の段落書式を維持します。私はPerlでコーディングしています。正規表現を使用して文字列内の余分な空白を取り除く方法

助けていただけたら幸いです!

答えて

14

正規化水平空白:

s/\h+/ /g; 

正規化垂直空白:

s/\v+/\n/g; 

正規化すべての空白:

s/[\h\v]+/ /g; 
+0

ありがとう!最後の1つは完璧です! (私はまだ、正規表現を使用するべきではないことを知っています:P) – Sheldon

4

あなたがFYI

s/\s+/ /g; 

正規表現の簡単なperlの、最高のUNIXツールtr

tr -s ' ' 

ウィルスクイーズ単一のスペースにスペースで行われているこの種のものを使用することができます。

+2

Perlにはtr ///もあります。tr/\ n \ r \ f \ t// s – tadmc

+0

良い点、追加いただきありがとうございます。 – ocodo

1

上記回答の両方が両方の場合において、結果を与えています文字列の先頭と最後に空白があります。

私は、文字列"Hello World" のでこれらの正規表現を使用している場合は、私がとして結果を取得するには"Hello World" の

としての答えを取得していますが、 "Hello World" の、次のPerlの正規表現正常に動作します

$a =~ s/(?<!\w) //g; 

ここでは、余白をすべて削除しています。