大家好,我正在使用Ruby-2.5.0和Rails 5开发RoR项目。我有一个从字符串中查找时间的模式,如下所示:
time_pattern = /(\d{2}\:\d{2}:\d{2}|\d{2}\:\d{2})/
time = mystr[time_pattern]
它返回字符串中的第一个匹配时间,例如,如果字符串“14:04”和“14:05”中存在两个时间,它将始终返回第一个时间“14:04”。我需要找到第二个。请帮助我找到第二个匹配使用正则表达式。我也尝试了扫描方法,如:
time = params.to_s.scan(time_pattern).uniq.flatten.last
但是我的rubocop抛出一个错误Methods exceeded maximum allowed ABC complexity (1)
请帮助。先谢谢你了。
2条答案
按热度按时间dw1jzc5e1#
上次正则表达式匹配
要获得最后一个匹配,您只需在
#scan
结果上调用#last
。ABC-指标
ABC指标更复杂,需要查看整个方法。但这里有一篇博客文章很好地解释了这一点:Understanding Assignment Branch Condition
另一个选项是更改RuboCop设置中的最大ABC大小。看看RuboCop Configuration Documentation和默认配置(Metrics/AbcSize最大大小默认设置为15)。
thtygnil2#
尝试使用以下表达式:
/(\d{2}:\d{2}(:\d{2})?)/g
。下面是一个在
ruby
中运行的例子: