Regex 用于查找文件路径的Groovy模式或正则表达式

Regex 用于查找文件路径的Groovy模式或正则表达式,regex,file,groovy,directory,find,Regex,File,Groovy,Directory,Find,我试图在某些“basedir”下存在的许多可能路径中找到一个文件路径 查找的文件路径具有以下特征: 路径位于已知的“basedir”下,例如 “C:\somedir\basedir\” 路径始终包含一个已知的子目录名,例如“SUBDIRNAMEWEKNOW” 文件名也是已知的,例如“filename.xml” 因此,寻求的文件路径可能是,例如: C:\somedir\basedir\SUBDIRNAMEWEKNOW\someotherdir\filename.xml C:\somedir\bas

我试图在某些“basedir”下存在的许多可能路径中找到一个文件路径

查找的文件路径具有以下特征:

  • 路径位于已知的“basedir”下,例如
    “C:\somedir\basedir\”
  • 路径始终包含一个已知的子目录名,例如“SUBDIRNAMEWEKNOW”
  • 文件名也是已知的,例如“filename.xml”
  • 因此,寻求的文件路径可能是,例如:

    C:\somedir\basedir\SUBDIRNAMEWEKNOW\someotherdir\filename.xml
    C:\somedir\basedir\someotherdir\SUBDIRNAMEWEKNOW\someotherdir\filename.xml
    
    或已知“basedir”下任何子目录的任何其他组合

    我对Groovy的最大了解集中在这段代码中:

    def file_paths = new FileNameFinder().getFileNames(basedir, '**/filename.xml')
    
    此代码的输出如下所示:

    C:\somedir\basedir\Test-Folder\filename.xml,
    C:\somedir\basedir\Test-Folder\someotherdir\someotherdir\filename.xml, 
    C:\somedir\basedir\someotherdir\SUBDIRNAMEWEKNOW\filename.xml
    C:\somedir\basedir\someotherdir\filename.xml
    
    def file_paths = FileNameByRegexFinder().getFileNames(basedir, /.filename.xml/)
    
    只有一条路是正确的。带有C:\somedir\basedir\someotherdir\SUBDIRNAMEWEKNOW\filename.xml的

    带有regexp的替代代码如下所示:

    C:\somedir\basedir\Test-Folder\filename.xml,
    C:\somedir\basedir\Test-Folder\someotherdir\someotherdir\filename.xml, 
    C:\somedir\basedir\someotherdir\SUBDIRNAMEWEKNOW\filename.xml
    C:\somedir\basedir\someotherdir\filename.xml
    
    def file_paths = FileNameByRegexFinder().getFileNames(basedir, /.filename.xml/)
    

    您知道如何使用模式或正则表达式来实现这一点吗?

    FileNameFinder.getFileNames需要一个作为第二个参数。 在您的例子中,最相关的是与零个或多个目录匹配的
    **
    占位符。模式将是:

    def file_paths = new FileNameFinder().getFileNames(basedir, '**/SUBDIRNAMEWEKNOW/**/filename.xml')