Что нового

[Данные, строки] Как заменить последний пробел в строке

vaf

Новичок
Сообщения
186
Репутация
2
Добрый день уважаемые форумчане. Возник вопрос, разрешить который у меня получается не совсем элегантно.
Даны строки:
ул. 354 стрелковой дивизии 23б
ул. Калинина 17
ул. Карла Маркса 211
в общем мне нужно названия улиц отделить от номера дома запятой. Пока делаю так, возвращаю по одному символу с конца строки, как только появляется пробел,возвращаю то что до этого пробела, ставлю запятую и возвращаю что после пробела.
т.к. я еще новичок, это получается слишком громоздко. Как бы это сделать получше ?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
vaf
Конкретно с этим текстом у меня так меняет:
Код:
$sText = 'ул. 354 стрелковой дивизии 23б' & @CRLF & _
		'ул. Калинина 17' & @CRLF & _
		'ул. Карла Маркса 211'

$sText = StringRegExpReplace($sText, '(.*?\s.*?)\s(\d.*?)', '\1, \2')
MsgBox(0, '', $sText)
но если номер дома будет начинаться не с цифры, то замены не будет.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Еще вариант :
Код:
$sText = 'ул. 354 стрелковой дивизии       23б     ' & @CRLF & _
        'ул. Калинина     17' & @CRLF & _
        'ул. Карла Маркса 211'

$sPattern="\s*(\d+?\D?)\s*($|\r\n)"

$sReplace=",\1\2"; без пробелов
;$sReplace=", \1\2"; с пробелом после запятой
;$sReplace=" ,\1\2"; с пробелом до запятой
;$sReplace=" , \1\2"; с пробелами до и после запятой

$sNewText=StringRegExpReplace($sText,$sPattern,$sReplace)
ConsoleWrite($sNewText & @LF)

Он позволяет унифицировать результат независимо от наличия пробелов и их количества в разных строках текста
 
Автор
V

vaf

Новичок
Сообщения
186
Репутация
2
Спасибо, как раз то что нужно. А не про консультируете еще по этим выражениям '(.*?\s.*?)\s(\d.*?)', '\1, \2'
а то мне еще нужно от TABов избавиться
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
vaf сказал(а):
А не про консультируете еще по этим выражениям '(.*?\s.*?)\s(\d.*?)', '\1, \2'
Вообще-то это к автору надо.
Но попробую
.*? - 0 или несколько любых символов (? - наименьшее кол-во)
\s - пробел
\d -цифра
\1 и \2 выражения , находящиеся в скобках

Т.е. Заменить :
все, что до пробела (.*?\s.*?)
сам пробел ,находящийся перед цифрой \s
все,что после пробела (\d.*?)

на
все, что до пробела \1
,
все,что после пробела \2
 
Верх