我有一个这样的字符串:“im @ -33.870816,151.203654” 我想提取包括连字符在内的两个数字。 我试过这个:
mystring = "im@ -33.870816,151.203654"
/\D*(\-*\d+\.\d+),(\-*\d+\.\d+)/.match(mystring)
这给了我:
33.870816,151.203654
如何获得连字符?
我需要在ruby中执行此操作
编辑:我应该澄清,“im @”只是一个例子,在数字之前可以有任何字符集。这些数字大多是用逗号形成的。我在使用连字符( - )
时遇到了麻烦Edit2:注意两个nos是lattidue,经度。这种模式大多是固定的。但是,理论上,前面的字符串可以是任意的。我不指望它有没有。或连字符,但你永远不知道。
答案 0 :(得分:3)
这个怎么样?
arr = "im@ -33.2222,151.200".split(/[, ]/)[1..-1]
和arr是["-33.2222", "151.200"]
,(使用split method)。
现在
arr[0].to_f
为-33.2222
,arr[1].to_f
为151.2
编辑:根据评论中的建议剥离“im @”部分[1 ..- 1]。
EDIT2:此外,无论第一个字符是什么,这项工作都是如此。
答案 1 :(得分:2)
如果你想用连字符捕获这两个数字,你可以使用这个正则表达式:
> str = "im@ -33.870816,151.203654"
> str.match(/([\d.,-]+)/).captures
=> ["33.870816,151.203654"]
编辑:现在它会捕获连字符。 这个单独捕获每个数字:http://rubular.com/r/NNP2OTEdiL
注意:使用String#scan
将匹配给定模式的所有次数,在这种情况下
> str.scan /\b\s?([-\d.]+)/
=> [["-33.870816"], ["151.203654"]] # Good, but flattened version is better
> str.scan(/\b\s?([-\d.]+)/).flatten
=> ["-33.870816", "151.203654"]
我建议你和Rubular玩一下。还有一些关于Ruby的regegular表达式的文档:
http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html#UJ
http://www.regular-expressions.info/ruby.html
http://www.ruby-doc.org/core-1.9.3/Regexp.html
答案 2 :(得分:0)
你的正则表达式不起作用,因为连字符被\D
捕获,所以你必须修改它才能捕获正确的字符集。
[^0-9-]*
将是一个不错的选择。