2015-08-18 158 views
0

我有一個由單詞,特殊字符(*,|,(等)和數字(浮動)組成的字符串,我想刪除單詞和特殊字符之間的空格。 。之間的數字不應該被刪除我怎麼能做到這一點在Perl刪除單詞之間的空格而不是數字之間的空格

如:

Rama 1 * 2.34 * (L - 0.45) XYZ 10 20.05 30.06 40 P > 25.

它應該是轉換後:

Rama1*2.34*(L-0.45)XYZ 10 20.05 30.06 40 P>25.

+1

提示:'\ D'在正則表達式匹配的數字,'\ D'匹配非數字 – mob

+4

那麼,爲什麼有這'XYZ 10'沒有'Rama1'空間和? –

回答

0

您可以使用下面的基於lookaround的正則表達式。

perl -pe 's/\s+(?=\D)|(?<=\D)\s+//g' file 

例子:

$ echo 'Rama 1 * 2.34 * (L - 0.45) XYZ 10 20.05 30.06 40 P > 25.' | perl -pe 's/\s+(?=\D)|(?<=\D)\s+//g' 
Rama1*2.34*(L-0.45)XYZ10 20.05 30.06 40P>25. 

$ echo 'Rama 1 * 2.34 * (L - 0.45) XYZ 10 20.05 30.06 40 P > 25.' | perl -pe 's/(?<=[^\s\w])\s+|\s+(?=[^\w\s])//g' 
Rama 1*2.34*(L-0.45)XYZ 10 20.05 30.06 40 P>25.