2015-08-18 6 views
0

У меня есть строка, состоящая из слов, специальных символов (*, |, (и т. Д.) И чисел (плавающих). Я хочу удалить пробелы между словами и специальными символами. . между цифры не должны быть удалены Как я могу это сделать в PerlУдаление пробелов между словами только между номерами

Eg:

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

Тогда почему есть место в этом '10' XYZ, а не в' Rama1'? –

ответ

0

Вы можете использовать приведенное ниже регулярное выражение.

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. 
Смежные вопросы