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 派生的正则表达式语法和测试数据都会遇到同样的问题。
我对正则表达式很在行,很明显它们是正则表达式的几种变体。
我正在使用 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 派生的正则表达式语法和测试数据都会遇到同样的问题。