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

Regex 可以解析这些示例文件路径的正则表达式,regex,parsing,expression,Regex,Parsing,Expression,我需要一个正则表达式,它可以解析以下示例文件路径,并返回路径、base、ext和num,如下表所示 这个正则表达式几乎可以工作,但不幸的是,当文件名包含多个句点时,它会出现问题 ^(.*\\)?(.*?)\.(.*?)\.?([0-9]+)?$ input path base ext num --------------------------- ------------ ------

我需要一个正则表达式,它可以解析以下示例文件路径,并返回路径、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      
以下是正在运行的自动热键代码(感谢以下人员):

请尝试以下版本:

^(.*\\)?(.*?)\.([^\.]*?)\.?([0-9]+)?$
差异是倒数第二组:将
([^\.]*?)
更改为
(.*?)
,因此匹配中不包括点


根据提供的数据在great上进行测试。

似乎您可以通过简单地添加基本名称来适应多个时段:

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

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


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

你用什么语言做这件事?可能有更好的方法,非常好,但是在阅读了mghicks response之后,我将这个例子添加到测试00883005.mp3中,这个正则表达式返回ext=mp和num=3。它应该返回ext=mp3和num=NULL?然后只需在
[0-9]
之前添加
\b
,这似乎很有效。。。感谢Jens Hoffmann、mghicks和Tim Pietzcker。这是有效的正则表达式^(.\\)?(.*?)\([^\.]*?)\(\b[0-9]+)$
^(.*\\)?(.*?)\.((.*?)\.?)+([0-9]+)?$