我正在尝试匹配下面给出的模式
pattern: file.update.20120304.xml
file.update.1.xml
file.update.201203040002.xml
如果我必须匹配留下数字file.update..xml的模式 我怎么能用红宝石做什么?
答案 0 :(得分:2)
"file.update.20120304.xml"[/\d+/] # => "20120304"
"file.update.1.xml"[/\d+/] # => "1"
"file.update.201203040002.xml"[/\d+/] # => "201203040002"
答案 1 :(得分:1)
filename = 'file.update.20120304.xml'
numbers = filename.gsub(/\Afile\.update\.(\d+)\.xml\z/, '\1')
使用的正则表达式如下:
file\.update\.
,以确保您拥有“file.update”([0-9]+)
有一个或多个号码\.xml
,确保最后有“.xml”\A
和\z
表示字符串的开头和结尾中间部分用()
包装成Regexp变量,您可以在替换字符串中重用\1
使用variableName[/regular expression/]
filename = 'file.update.20120304.xml'
numbers = filename[/\Afile\.update\.(\d+)\.xml\z/, 1]
它返回第一个捕获的组,即()
之间。
答案 2 :(得分:1)
p "file.update.201203040002.xml".split(".") .map { |x| x if x.to_i != 0}.compact[0].to_i
#=> 201203040002
p "file.update.20120304.xml".split(".") .map { |x| x if x.to_i != 0}.compact[0].to_i
#=> 20120304