Справка по поиску в Ruby Regex - PullRequest
1 голос
/ 14 марта 2011

Это просто общий вопрос: «Что плохого в моем регулярном выражении, что он не вытаскивает все, что я ожидал?»

Вот моя строка:

"Mon 0900-1600 1700-2000"

и я бы хотел иметь возможность вывести времена "0900-1600" и "1700-2000".

Это мое регулярное выражение /([0-9]{4}-[0-9]{4})/, и, хотя оно отлично работает при поиске первого вхождения времени, оно не возвращает совпадение второму. Может кто-нибудь сказать мне, почему?

Вот мой фактический фрагмент кода для записи:

str = "Mon 0900-1600 1700-2000"

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

Ответы [ 2 ]

4 голосов
/ 14 марта 2011

Попробуйте использовать 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"]]
1 голос
/ 14 марта 2011

Почему бы не использовать String # split?

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

В противном случае упростите и используйте:

asdf.scan(/\d+-\d+/) #=> ["0900-1600", "1700-2000"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...