ruby中数列的正则表达式
我正在尝试匹配下面给出的模式ruby中数列的正则表达式,ruby,regex,Ruby,Regex,我正在尝试匹配下面给出的模式 pattern: file.update.20120304.xml file.update.1.xml file.update.201203040002.xml 如果我必须匹配离开数字文件.update..xml的模式 在ruby中我该怎么做?您可以使用和来提取数字 filename = 'file.update.20120304.xml' numbers = filename.gsub(/\Afile\.update\.(\d+)\.xml\
pattern: file.update.20120304.xml
file.update.1.xml
file.update.201203040002.xml
如果我必须匹配离开数字文件.update..xml的模式
在ruby中我该怎么做?您可以使用和来提取数字
filename = 'file.update.20120304.xml'
numbers = filename.gsub(/\Afile\.update\.(\d+)\.xml\z/, '\1')
使用的regexp由以下部分组成:
- 第一部分
确保您有“file.update”文件\.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]
它返回第一个捕获的组,即介于
()
什么是源字符串和您想要的确切输出之间?您已经尝试了什么?有你?它有一些有用的例子。@RubyLovely我假设他们想从文件.update.201203040002.xml
中提取201203040002
,但这是一个非常好的问题。太棒了,我从来不知道,ppl会在堆栈溢出时反应如此之快…我很惊讶..谢谢大家,而且你的代码工作得非常好。。我可能会收到像我提到的模式一样的文件名,但我只想匹配,在文件名中保留字符,或者你可以使用\d+
@Krish我已经更新了我的答案来提取数字,我不知道这个符号。谢谢。但是regexp是错误的,因为“file.1545.update.1.xml”[/\d+/]
返回第一次出现的1545
@toch“file.1545.update.1.xml”
来自哪里?为什么regexp错误?它是另一个不遵循模式的字符串。我想,在那种情况下,什么都不应该被退回。但也许我错了。+1对于语法,它看得不够。@iain我对regex
不在行,因此总是试图绕过它;):)。它返回第一个数字组。使用“file.24554.update.20120304.xml”
您将获得24554
。对我来说,它不应该为那个案例返回任何东西。@toch-umm,我认为OP所要求的对他/她有用。如果他需要你的例子,可以修改它。:)
"file.update.20120304.xml"[/\d+/] # => "20120304"
"file.update.1.xml"[/\d+/] # => "1"
"file.update.201203040002.xml"[/\d+/] # => "201203040002"
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