Что нового

[Данные, строки] StringRegExp найти число с десятичными знаками (после запятой)

mvalera

Новичок
Сообщения
3
Репутация
0
Есть строка: Станция<t><right>15<t><right>903 006,68 ISK<t>Amarr VIII (Oris) - Академия Emperor Family*<t>Станция<t><right>1<t>89д 23ч 55мин 13с
Нужно вытащить из неё второе число вместе с цифрами после запятой. Чтоб была переменная=903006,68
У меня получилось вытаскивать число перед ISK - получается 68, но целая часть числа перед запятой не идет.

Код:
$asResult="Станция<t><right>15<t><right>903 006,68 ISK<t>Amarr VIII (Oris) - Академия Emperor Family*<t>Станция<t><right>1<t>89д 23ч 55мин 13с"
$asResult=StringStripWS($asResult, 8) ;убираем все пробелы в строке

$asResult = StringRegExp($asResult, '([0-9]{1,10})(ISK)', 1) ;выдает перед ISK число

If @error = 0 Then
    MsgBox(0, "пример 1", $asResult[0])
EndIf
 

sngr

AutoIT Гуру
Сообщения
983
Репутация
392
Код:
StringRegExp($asResult, '[0-9]+,[0-9]*',1)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
mvalera,
Мой вариант.
Код:
$sResult = 'Станция<t><right>15<t><right>903 006,68 ISK<t>Amarr VIII (Oris) - Академия Emperor Family*<t>Станция<t><right>1<t>89д 23ч 55мин 13с'
$sRes = StringRegExpReplace($sResult, '(?is).*>([\d\h,]+)isk<.*', '$1')
If @extended = 1 Then ConsoleWrite(StringStripWS($sRes, 8) & @LF)
 
Автор
M

mvalera

Новичок
Сообщения
3
Репутация
0
Всем спасибо!!!
Использовал шаблон второго выражения. Заработало
Код:
$asResult = StringRegExp($asResult, '(?is).*>([\d\h,]+)isk<.*', 1) ;выдает перед ISK число


п.с. первый пример не пошел. Почему то
Код:
$asResult=StringStripWS($asResult, 8) ;убираем все пробелы

Команда не убрала один пробел внутри числа (отделяет разряд числа), поэтому первый пример выдал нужное число до тысячи, т.е. 006,68. Но в тоже время без пробелов в числе тоже работает.
Кстати, команда
Код:
StringStripWS
не нужна. Почему то выделяемое число и с пробелами AutoIt определяет как число и нормально проводит с ним арифметические операции

Второй пример любопытен, так и не понял зачем использовать команду перезаписи, ну может для ещё одного варианта. Надо ещё покурить перед примером :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
mvalera,
Для того, чтобы можно было производить с полученным числом арифметические действия, нужно еще запятую поменять на точку.
 
Автор
M

mvalera

Новичок
Сообщения
3
Репутация
0
Да понял только что. С арифметическими операциями засада.
Самое забавное, если не требуется менять значение, а только проводить операции сравнения этого не требуется.
Код:
$asResult="Станция<t><right>15<t><right>903 006,68 ISK<t>Amarr VIII (Oris) - Академия Emperor Family*<t>Станция<t><right>1<t>89д 23ч 55мин 13с"
; тестовый пример

;$asResult=StringStripWS($asResult, 8) ;убираем все пробелы
;MsgBox(0, "пример 1", $asResult)
$asResult = StringRegExp($asResult, '(?is).*>([\d\h,]+)isk<.*', 1) ;выдает перед ISK число

If @error = 0 Then
    MsgBox(0, "пример 1", $asResult[0])

 EndIf
$a=(900000-$asResult[0])/900000*100
MsgBox(0, "пример 2", $a)


Вот конечный вариант. Полученное число можно использовать, как обычное число, оказывается одной командой тут не обойдешься
Код:
sResult = 'Станция<t><right>15<t><right>903 006,68 ISK<t>Amarr VIII (Oris) - Академия Emperor Family*<t>Станция<t><right>1<t>89д 23ч 55мин 13с'
$sRes = StringRegExpReplace($sResult, '(?is).*>([\d\h,]+)isk<.*', '$1')
$sRes = StringRegExpReplace ($sRes, ",", ".");замена запятой на точку
$sRes=StringStripWS($sRes, 8) ;убираем все пробелы

$sRes=$sRes+0.01

ConsoleWrite(StringStripWS($sRes, 8) & @LF); выводим результат в консоль
 
Верх