Как вытащить числа из строки?

В вексе для этого есть две функции:

atof("строка") - преобразует строку во флоат
atoi("строка") - преобразует строку в целое число

При этом в строке не должно быть других символов, кроме цифр, десятичной точки и знака «е» для записи типа 1.25e+5

Например atof(«12.5») вернет число 12.5

Для целых чисел есть функция opdigits(), которая возвращает последнюю последовательность целых чисел из строки. Обычно она используется, чтобы парсить пути до нод, но и для обычных строк работает.

opdigits("gfhfhg123jshfh") вернет 123

Если же в строке есть другие символы, кроме цифр, и нужно вытащить из нее флоат, то задача сводится к удалению лишних символов из строки. Это делается с помощью регулярных выражений (regular expression, regexp).

Функции для работы с регулярными выражениями в вексе начинаются с приставки «re_».

s@in = "gfhdg12.5jahd";
@out=atof(re_replace(r"[^.0-9]+", "", @in));
В @out окажется число 12.5

Во второй строке мы используем функцию re_replace, которая ищет в атрибуте @in подстроку по регулярному выражению [^.0-9]+, то есть все, кроме точки и цифр 0-9. Буква r перед кавычками важна. 

Дальше мы заменяем найденное на пустую строку «». На выходе у нас остаются только цифры и точка, к которым мы уже применяем atof.

А вот если нужно распарсить строку, где может быть несколько чисел с буквами и символами между ними, то используем такую конструкцию:

s@in="123hjh765.4hfhsd12jsh";
string array[] = re_split(r"[^.0-9]+", @in);

Эта функция создаст массив строк, а в качестве разделителя использует все то же выражение. Единственное, если исходная строка начинается не с цифры, то в начале массива создастся пустой элемент, надо это учитывать. В данном примере на выходе будет массив из строк “123″, “765.4″, “12″. Дальше уже можно по этому массиву идти циклом и использовать atof().