-1

我正在尝试匹配下面给出的模式

pattern: file.update.20120304.xml
     file.update.1.xml
     file.update.201203040002.xml

如果我必须匹配留下数字 file.update..xml 的模式,我该怎么做 ruby​​?

4

3 回答 3

2
"file.update.20120304.xml"[/\d+/]     # => "20120304"
"file.update.1.xml"[/\d+/]            # => "1"
"file.update.201203040002.xml"[/\d+/] # => "201203040002"
于 2013-04-10T17:17:06.873 回答
1

您可以使用Regexpgsub提取数字

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 ()

于 2013-04-10T15:59:49.343 回答
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
于 2013-04-10T18:48:51.010 回答