0

次のような文字列があります: "im@ -33.870816,151.203654" ハイフンを含む 2 つの数字を抽出します。私はこれを試しました:

mystring = "im@ -33.870816,151.203654"
/\D*(\-*\d+\.\d+),(\-*\d+\.\d+)/.match(mystring)

これは私に与えます:

33.870816,151.203654

ハイフンを取得するにはどうすればよいですか?

ルビーでこれを行う必要があります

編集:明確にする必要があります。「im@」は単なる例であり、数字の前に任意の文字セットを含めることができます。数値は、ほとんどの場合、コンマで適切に形成されます。ハイフン (-) に問題がありました

Edit2: 2 つの番号が緯度、経度であることに注意してください。そのパターンはほとんど修正されています。ただし、理論的には、前の文字列は任意である可能性があります。私はそれがいいえを持つことを期待していません。またはハイフンですが、わかりません。

4

3 に答える 3

3

これはどう?

arr = "im@ -33.2222,151.200".split(/[, ]/)[1..-1]

arr は["-33.2222", "151.200"]です (分割メソッドを使用)。

arr[0].to_fあり-33.2222arr[1].to_fあり151.2

編集:コメントで提案されているように、[1..-1]で「im @」部分を削除しました。

EDIT2:また、最初の文字が何であるかに関係なく、これは機能します。

于 2013-01-28T13:01:53.947 に答える
2

ハイフンで 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 での正規表現に関するドキュメントもいくつかあります。

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

于 2013-01-28T13:02:52.757 に答える
0

ハイフンが によってキャッチされるため、正規表現は機能しません\D。そのため、正しい文字セットのみをキャッチするように変更する必要があります。

[^0-9-]*良い選択肢でしょう。

于 2013-01-28T12:58:11.243 に答える