使用正则表达式查找模式时的反向顺序错误范围?

时间:2014-01-23 09:00:16

标签: regex vb.net search

我找到了一个基于正则表达式的子目录。

当我有以下正则表达式模式时,一切正常。

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] $

如果有人能提供帮助,我会很高兴。 : - )

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上使用默认操作系统选项,它会隐藏已知文件类型的扩展名,因此您的预期路径可能不是正则表达式评估的路径。