регулярное выражение, которое может анализировать эти примеры файловых путей - PullRequest
0 голосов
/ 16 сентября 2011

Мне нужно регулярное выражение, которое может проанализировать следующие пути к файлам примера и вернуть путь, 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 ]

2 голосов
/ 16 сентября 2011

Попробуйте эту версию:

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

Разница между второй и последней группой: изменено ([^\.]*?) на (.*?), так что точка не включена в соответствие.* Протестировано на большом www.regexplanet.com с предоставленными данными.

0 голосов
/ 16 сентября 2011

Если вы можете гарантировать, что ext не содержит цифр, то

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

0 голосов
/ 16 сентября 2011

похоже, что вы можете разместить несколько периодов, просто добавив к базовому имени:

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