我找到了一个基于正则表达式的子目录。
当我有以下正则表达式模式时,一切正常。
Dim sPattern As String = "^[/C:\/Users\/parth.jani\/Documents\/New folder\/b\/Photo_](.*)[_Order1]$"
但是,如果我有以下模式,它会以反向顺序错误抛出 [x-y]范围。
Dim sPattern As String = "^[/C:\/Users\/parth.jani\/Documents\/New folder\/b\/Photo_](.*)[_Order-1]$"
我知道它的“ - ”字符导致
中的错误[_订单-1] $
如果有人能提供帮助,我会很高兴。 : - )
答案 0 :(得分:3)
连字符-
字符在RegEx
中具有语义含义,尤其是在[]
中。如果这是您需要匹配的文件名的一部分,则应使用\-
转义。
一般来说,[]
在您的表达式中的使用对我来说似乎不合适,因为它表示可能的字符的范围,而不是序列。如果您需要将其内容视为单独的组,请改用()
,如下所示:
"^(C:\\Users\\parth.jani\\Documents\\New folder\\b\\Photo_)(.*)(_Order\-1)$"
如果您担心捕获组不匹配这些(即如果您只需捕获(.*)
部分),则在其他组的开头添加?:
,以便匹配器会忽略它们:
"^(?:C:\\Users\\parth.jani\\Documents\\New folder\\b\\Photo_)(.*)(?:_Order\-1)$"
注意我已将路径分隔符从"\/"
更改为"\\"
,因为前者无效。如果仍然没有获得匹配,并且您针对文件运行此操作,请检查您的文件是否具有扩展名。当模式现在,它将期望路径没有文件扩展名(目录名或没有ext的文件)。如果您针对文件运行代码并使用类似于Directory.GetAllFiles()
的方式检索扩展名,则调用将包含带扩展名的文件名,并且正则表达式将与它们不匹配。我添加这个是因为如果您在Windows上使用默认操作系统选项,它会隐藏已知文件类型的扩展名,因此您的预期路径可能不是正则表达式评估的路径。