从regexp中获取参数

cla*_*laj 2 regex clojure

我希望它以某种方式返回450,$ 1只是一个愚蠢的变量名称.这就像格式的反面.实现这一目标的clojure正则表达式魔法是什么?

(re-something #"$1\sUSD" "450 USD")
Run Code Online (Sandbox Code Playgroud)

kot*_*rak 6

user=> (re-find #"(\d\d\d) (USD)" "450 USD")
["450 USD" "450" "USD"]
user=> (nth *1 1)
"450"
Run Code Online (Sandbox Code Playgroud)


rae*_*aek 6

我喜欢使用重新查找,if-let和destructuring.我经常用以下模式编写解析代码:

(def currency-regex #"(\d+) ([A-Z]{3})")

(defn parse-currency [s]
  (if-let [[_ amount currency] (re-find currency-regex s)]
    (process amount currency)
    (signal-error s)))
Run Code Online (Sandbox Code Playgroud)