可以解析这些示例文件路径的正则表达式

时间:2011-09-15 21:57:56

标签: regex parsing expression

我需要一个可以解析以下示例文件路径的正则表达式,并返回路径,base,ext和num,如下表所示。

这个正则表达式几乎可以正常工作,但不幸的是,当文件名包含多个句点时,它就会失效。

^(.*\\)?(.*?)\.(.*?)\.?([0-9]+)?$

input                         path            base            ext     num
---------------------------   ------------    ----------      ------  ------
c:\temp\00883005.prt.1        c:\temp\        00883005        prt     1
00883005.prt                                  00883005        prt
00883005.prt.1                                00883005        prt     1
\\data\test\00883005.prt      \\data\test\    00883005        prt
\\data\test\00883005.prt.1    \\data\test\    00883005        prt     1
00883005.test.prt                             00883005.test   prt        
00883005.test.prt.1                           00883005.test   prt     1
c:\temp\00883005.test.prt.1   c:\temp\        00883005.test   prt     1
00883005.mp3                                  00883005        mp3      

以下是有效的AutoHotkey代码(感谢下面的人):

RegExMatch( filename, "^(.*\\)?(.*?)\.([^\.]*?)\.?(\b[0-9]+)?$", data)
outputdebug % "dir = " data1
outputdebug % "base = " data2
outputdebug % "ext = " data3
outputdebug % "num = " data4

3 个答案:

答案 0 :(得分:2)

试试这个版本:

^(.*\\)?(.*?)\.([^\.]*?)\.?([0-9]+)?$

区别在于倒数第二组:将([^\.]*?)更改为(.*?),以便匹配中不包含点。

针对提供的数据对优秀的www.regexplanet.com进行了测试。

答案 1 :(得分:0)

似乎只需添加基本名称就可以容纳多个句点:

^(.*\\)?(.*?)\.((.*?)\.?)+([0-9]+)?$

答案 2 :(得分:0)

如果你能保证ext永远不包含数字,那么

^(.*\\)?([^\\]+)\.([^.0-9]+)(?:\.([0-9]+))?