我正在尝试匹配下面给出的模式
pattern: file.update.20120304.xml
file.update.1.xml
file.update.201203040002.xml
如果我必须匹配留下数字 file.update..xml 的模式,我该怎么做 ruby?
"file.update.20120304.xml"[/\d+/] # => "20120304"
"file.update.1.xml"[/\d+/] # => "1"
"file.update.201203040002.xml"[/\d+/] # => "201203040002"
filename = 'file.update.20120304.xml'
numbers = filename.gsub(/\Afile\.update\.(\d+)\.xml\z/, '\1')
使用的正则表达式组成如下:
file\.update\.
确保您拥有“file.update”的第一部分([0-9]+)
有一个或多个数字\.xml
,确保最后有“.xml”\A
和\z
字符串的开头和结尾中间部分被包装()
成一个正则表达式变量,您可以在替换字符串中重用它\1
更新variableName[/regular expression/]
filename = 'file.update.20120304.xml'
numbers = filename[/\Afile\.update\.(\d+)\.xml\z/, 1]
它返回第一个捕获的组,即 between ()
。
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