2010-01-27 6 views
3

Я не могу понять это:Regex: Матч этой строки

22.584\r\n\t\t\tl-6.579-22 

Я хочу, чтобы соответствовать "\r\n\t\t\t" и заменить одним пробелом " ". Проблема в том, что число "\t", "\r" и "\n" колеблется, равно как и окружающие персонажи.

Помощь!

+0

Что относительно обычных пространств? Вы также хотите заменить два пробела на одно пространство? –

ответ

4

s/\s+/ /g

s/(?:\\[rnt])+/ /g 
+0

Nope. Не работает. – neezer

+0

@neezer, обратите внимание, что '\ s' соответствует больше, чем просто' \ t', '\ r' или' \ n'. Он соответствует (в большинстве случаев) следующим: '[\ t \ n \ x0B \ f \ r]', но это может быть хорошо с вами, конечно. –

+0

@ neezer: На каком языке вы используете? – kennytm

0

В PHP:

preg_replace("/(?:\\\[trn])+/", " ", $str); 
+0

Вы видели, что это был рубиновый вопрос? –

+0

Когда я ответил, не было упоминания о рубине или каком-либо другом языке. Сообщение было отредактировано позже, как вы можете видеть. Кроме того, принятый ответ использует синтаксис Perl. –

0
#!/usr/bin/ruby1.8 

s = "22.584\r\n\t\t\tl-6.579-22" 
p s       # => "22.584\r\n\t\t\tl-6.579-22" 
p s.gsub(/[\r\n\t]+/, ' ') # => "22.584 l-6.579-22" 
0

Я бы относиться к CR-NL, как один атом:

str.gsub!(/(?:\r\n)+\t+/, ' ') 
Смежные вопросы