我需要一个可以解析以下示例文件路径的正则表达式,并返回路径,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
答案 0 :(得分:2)
试试这个版本:
^(.*\\)?(.*?)\.([^\.]*?)\.?([0-9]+)?$
区别在于倒数第二组:将([^\.]*?)
更改为(.*?)
,以便匹配中不包含点。
针对提供的数据对优秀的www.regexplanet.com进行了测试。
答案 1 :(得分:0)
似乎只需添加基本名称就可以容纳多个句点:
^(.*\\)?(.*?)\.((.*?)\.?)+([0-9]+)?$
答案 2 :(得分:0)
如果你能保证ext永远不包含数字,那么
^(.*\\)?([^\\]+)\.([^.0-9]+)(?:\.([0-9]+))?