1

これは単なる一般的な「私が期待したすべてを引き出していないという私の正規表現の何が問題なのか」という質問です。

これが私の文字列です:

"Mon 0900-1600 1700-2000"

"0900-1600"と時代を引き出したいと思い"1700-2000"ます。

これは私の正規表現/([0-9]{4}-[0-9]{4})/であり、時間の最初の出現を見つけるのにうまく機能しますが、2番目の出現に一致を返しません。誰かが理由を教えてもらえますか?

レコードの実際のコードスニペットは次のとおりです。

str = "Mon 0900-1600 1700-2000"

/([0-9]{4}-[0-9]{4})/.match(str)  #<MatchData "0900-1600">
4

2 に答える 2

4

string#scan代わりに使用してみてください:

ruby-1.9.2-p136 :001 > str = "Mon 0900-1600 1700-2000"
 => "Mon 0900-1600 1700-2000" 
ruby-1.9.2-p136 :002 > str.scan /([0-9]{4}-[0-9]{4})/
 => [["0900-1600"], ["1700-2000"]]
于 2011-03-14T02:46:07.250 に答える
1

String#splitを使用してみませんか?

asdf = "Mon 0900-1600 1700-2000"
asdf.split(' ')[1,2] #=> ["0900-1600", "1700-2000"]

それ以外の場合は、単純化して使用します。

asdf.scan(/\d+-\d+/) #=> ["0900-1600", "1700-2000"]
于 2011-03-14T03:19:49.153 に答える