帮助Ruby中的Regex语句

时间:2010-05-12 00:13:56

标签: ruby regex

我有一个名为'raw'的字符串。我试图用以下方式在ruby中解析它:

raw = "HbA1C ranging 8.0—10.0%"
raw.scan /\d*\.?\d+[ ]*(-+|\342\200\224)[ ]*\d*\.?\d+/

上面的输出是[]。我认为它应该是:["8.0—10.0"]

有没有人对上述正则表达式语句的错误有任何见解?

注意:\342\200\224等于(em-dash,U + 2014)。

不起作用的作品是: (-+|\342\200\224)

我认为它应该相当于在字符串-上匹配1个或多个\342\200\224或匹配。

任何帮助都将非常感谢!

2 个答案:

答案 0 :(得分:1)

原始的正则表达式适用于我(ruby 1.8.7),只需要捕获非捕获,扫描将输出整个匹配。或者切换为String#[]String#match而不是String#scan,并且不要编辑正则表达式。

raw = "HbA1C ranging 8.0—10.0%"
raw.scan /\d*\.?\d+[ ]*(?:-+|\342\200\224)[ ]*\d*\.?\d+/
# => ["8.0—10.0"]

为了在Ruby中测试/构建正则表达式,在http://rubular.com处有一个梦幻般的工具,这使得它变得更加容易。 http://rubular.com/r/b1318BBimb是已编辑的正则表达式,其中包含一些测试用例,以确保它可以对付它们。

答案 1 :(得分:0)

raw = "HbA1C ranging 8.0—10.0%"
raw.scan(/\d+\.\d+.+\d+\.\d+/)
#=> ["8.0\342\200\22410.0"]