clojure 1.7 中的正则表达式

Regex in clojure 1.7

我对正则表达式很在行,很明显它们是正则表达式的几种变体。

我正在使用 clojure 和在线工具 http://regexr.com/

我在 Whosebug 和其他地方遇到过几个例子,但它们似乎并不总是有效。 下面是我试图实现的但输出是错误的

\d{1,3}(,\d{3})*(\.\d\d)?|\.\d\d

这里是示例输入字符串

I used to have 1,956,827.19 USD I once spent 987.99 USD in one days before my bank put a cap on 900 and 2 years later i have a balance of 1,200.8 USD.

所以在解析它之后我希望得到一个列表 ("1,956,827.19" "987.99" "900" "2" "1,200.8") 所以我希望有 5 个元素。

我正在使用以下表达式

  (re-seq 
     (re-pattern Regex my-sentence))

如有任何建议,我将不胜感激。

如果您查看 实际 输出及其不同之处,将会有所帮助。

运行

(map first (re-seq #"\d{1,3}(,\d{3})*(\.\d\d)?|\.\d\d"
                   "I used to have 1,956,827.19 USD I once spent 987.99 USD in one days before my bank put a cap on 900 and 2 years later i have a balance of 1,200.8 USD.")

...产量作为输出...

("1,956,827.19" "987.99" "900" "2" "1,200" "8")

很明显,这里唯一错误的部分是小数点后的内容单独匹配。发生这种情况是因为您强制 \.\d\d - 小数点后两位 - 但在您的测试字符串中只有一个。

#"\d{1,3}(,\d{3})*(\.\d+)?"

...没有这个问题。

这里没有特定于 Clojure 的内容 -- 您对任何 PCRE 派生的正则表达式语法和测试数据都会遇到同样的问题。