我有一个名为'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
或匹配。
任何帮助都将非常感谢!
答案 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"]