【发布时间】:2014-09-29 01:30:23
【问题描述】:
我正在尝试在 F# 中编写一个匹配此类内容的正则表达式
.float -.05, 2.4
.float 31.1234
.float -0.5, 1.0, 1.1
我正在尝试这样的事情
let matchFloat input =
let matches = Regex(@"(\.float )?(?<float>[+-]?\d*\.\d+)").Matches(input)
([for m in matches -> m.Groups.["float"].Value, matches.Count > 0)
哪种有效,但我对 .double 有同样的看法,无论我的 match 表达式中的第一个是匹配的 - 因为我做了“发生 0 次或 1 次”,这意味着任一指令后面的浮点数字符串将被视为相同。
那么我如何确保 .float 存在,而不执行 input.StartsWith(...)?我知道有办法编写这个正则表达式,以便它能够适当地匹配,并且 m.Groups.["float"].Value 将只返回我需要的内容,而无需在事后删除空格或逗号。
我已经把这件事搞砸了好几个小时,只是无法让它做我想做的事。我尝试过使用lookbehind/lookahead 的东西,以及其他一些东西,但没有运气。
请帮忙! :)
【问题讨论】:
-
那么它应该匹配.float之后的第一对数字还是全部?
-
应该全部匹配
-
而且 .float 是强制发生的?
-
是的 - 我还有 .double,我需要能够区分它们。
-
为什么 input.StartsWith(...) 是一个糟糕的解决方案?它绝对更易读,更容易实现。
标签: regex f# capture comma directive