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