Что нового

[RegExp] узнать количество пробелов в начале строки

rivega

Новичок
Сообщения
45
Репутация
1
Добрый день.
Задача такая:узнать количество пробелов в начале строки(до начала любого текста, и без пробелов в самой строке).
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Архаический вариант :
Код:
$sText="     Text"
;$sPatern = "^(\s*)\S.+"
$sPatern = "(?s)^(\s*)\S.+" ;Так корректней
$sResult = StringRegExpReplace( $sText, $sPatern, '${1}' )
ConsoleWrite(" $sResult= " & StringLen($sResult) & @CRLF)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Ну тут уже и без рег. выражении можно обойтись:

Код:
$vTest = '      My Test'
$iSpace_Len = StringLen($vTest) - StringLen(StringStripWS($vTest, 1))

ConsoleWrite($iSpace_Len & @LF)
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
CreatoR [?]
Ну тут уже и без рег. выражении можно обойтись:
Ага. Или вообще так:
Код:
StringReplace('   SPACE_SPACE_SPACE', ' ', '')
ConsoleWrite('Количество пробелов в строке: ' & @extended & @LF)
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
inververs
Нет, так посчитает все замененные пробелы. А сказано только вначале строки.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Medic84
ага, ну мало ли. Может в конце строки и нет воовсе пробелов.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Код:
$sText = "     Text"
StringRegExp($sText, '^(\s+)', 1)
MsgBox(0, 'Сообщение', @extended - 1)
 
Автор
R

rivega

Новичок
Сообщения
45
Репутация
1
Круто, последнее то, что надо!
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
rivega [?]
Круто, последнее то, что надо!
Только надо учесть , что при отсутствии пробелов выдаст результат =-1

Еще один вариант :
Код:
;$sText = "Te xt "
$sText = "   Te xt "	
$i=StringInStr($sText, StringRegExpReplace( $sText, '(?s)^\s*(\S).+', '${1}'))
MsgBox(0,"", 'Число пробелов =' & $i-1)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
gregaz [?]
Только надо учесть , что при отсутствии пробелов выдаст результат =-1
Можно + заменить на *, и всё будет как надо :smile:.
Я как то забыл что StringRegExp устанавливает код @extended.


P.S.
Напомню, что \s это не только пробел (Chr(32)), но и любой „пустой“ символ (Chr(9) по Chr(13)).
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
CreatoR [?]
Можно + заменить на *, и всё будет как надо
smiley.gif
.Я как то забыл что StringRegExp устанавливает код @extended.

Ха, тогда самое красивое решение от Azjio
Код:
StringRegExp($sText, '^(\s*)', 1)
MsgBox(0, 'Сообщение', @extended - 1)

Кстати скобки здесь излишни:
Код:
StringRegExp($sText, '^\s*', 1)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
gregaz,
CreatoR [?]
Напомню, что \s это не только пробел (Chr(32)), но и любой „пустой“ символ (Chr(9) по Chr(13)).
Код:
$sText = '     ' & @CRLF & 'Text'
StringRegExp($sText, '^\h*', 1)
ConsoleWrite('h: ' & @extended - 1 & @LF)
StringRegExp($sText, '^\s*', 1)
ConsoleWrite('s: ' & @extended - 1 & @LF)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
madmasles
Вы думаете я этого не знаю? :smile:

Автор указал именно на пробел в названии и содержимом темы, про другие символы речь не шла, вот я и подумал что стоит упомянуть эту деталь.
 
Верх