1

这只是一个普遍的“我的正则表达式有什么问题,它没有提取出我所期望的一切”的问题。

这是我的字符串:

"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">
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 回答