Что нового

[RegExp] Получить значения дробных чисел в скобках?

eralex

Новичок
Сообщения
56
Репутация
4
Имеется набор примерно таких строк:
Код:
$TestString1 = "На 21,366% повышенный шанс критического удара (6,103, 12,264)"
$TestString2 = "12,312 % больше здоровья на данном предмете"
$TestString3 = "Cкорость атаки выше на 2,375%"
$TestString4 = "+ 8,295 % прочность доспехов"

 $asResult = StringRegExp($TestString4, '[0-9]+,[0-9]*', 1) 

If @error == 0 Then
   MsgBox(0, "SRE Result", $asResult[0])
EndIf


Требуется считать в переменные вещественные числа из них. С тестовыми строками $TestString2, $TestString3, $TestString4 нет проблем.
А как считать в массив значения из $TestString1 - те числа, что в скобках через запятую перечислены? Причём там может быть от 2ух до 4ёх значений через запятую.
Всё ещё осложняется тем, что целая и дробная часть разделены не точкой, а запятой, и сами числа разделены запятой.
 

xXx

╚{■_■}╗
Меценат
Сообщения
220
Репутация
82
Код:
#include <Array.au3>
$TestString1 = "На 21,366% повышенный шанс критического удара (6,103, 12,264)"
 $asResult = StringRegExp($TestString1, '[0-9]+,[0-9]*', 3) 
_ArrayDisplay($asResult)



Добавлено: [time]1542663428[/time]
eralex сказал(а):
и сами числа разделены запятой.
поправочка: запятой с пробелом.
 
Автор
E

eralex

Новичок
Сообщения
56
Репутация
4
Не, неправильно.
Смысл был вытянуть только числа в скобках: 6,103 и 12,264.
 

sngr

AutoIT Гуру
Сообщения
985
Репутация
392
Код:
$asResult = StringRegExp($TestString1, '(?:\(|\s)([0-9]+,[0-9]*)(?:,|\))', 3)
 
Автор
E

eralex

Новичок
Сообщения
56
Репутация
4
Спасибо за помощь. Всё как надо работает!
 
Автор
E

eralex

Новичок
Сообщения
56
Репутация
4
Возникла ещё одна проблема. Появились такие строки:
Код:
$TestString5 = "<cFFFFFFFF>Прочность доспехов: + <cD69B00FF>640"
$TestString6 = "<cFFFFFFFF>Здоровье: + <cD69B00FF>1078</></>"


Тут перед целым числом указывается цвет. Как исключить из поиска <cFFFFFFFF> и <cD69B00FF>, а то при попытке получить целое число
Код:
$asResult = StringRegExp($TestString6, '[0-9]+', 3)


в результат ошибочно заносятся числа 69 и 00.
 
Верх