Новый ответ
Мне больше нравится ответ снобота.Использование метода Java проще и надежнее, чем использование read-string для этого простого варианта использования.Я сделал пару небольших изменений.Поскольку автор не исключил отрицательных чисел, я настроил его, чтобы разрешить отрицательные числа.Я также сделал это так, что для начала нужно, чтобы число начиналось в начале строки.
(defn parse-int [s]
(Integer/parseInt (re-find #"\A-?\d+" s)))
Кроме того, я обнаружил, что Integer / parseInt анализирует как десятичное число, когда не задано основание, даже если есть начальные нули.
Старый ответ
Сначала проанализируем только целое число (так как это хит в Google и это хорошая справочная информация):
Вы можетеиспользуйте reader :
(read-string "9") ; => 9
Вы можете проверить, что это число после его прочтения:
(defn str->int [str] (if (number? (read-string str))))
Я не уверен, можно ли доверять пользовательскому вводуЧитатель Clojure, чтобы вы могли проверить, прежде чем он будет прочитан:
(defn str->int [str] (if (re-matches (re-pattern "\\d+") str) (read-string str)))
Я думаю, я предпочитаю последнее решение.
А теперь, к вашему конкретному вопросу.Для анализа чего-либо, начинающегося с целого числа, например 29px
:
(read-string (second (re-matches (re-pattern "(\\d+).*") "29px"))) ; => 29