正则表达式匹配目录路径并忽略文件路径

时间:2013-08-05 15:50:51

标签: regex

我有以下输入列表,我想从中提取目录路径并忽略文件路径。下面是一个由;

分隔的输入列表示例
MI4/Search/Service/src/main/resources/META-INF/persistence.xml;MI4/Search/Service/src/main/resources/META-INF;MI4/FRSearch/Service/src/main/resources/resource/spring.xml;MI4/Search/Service/src/main/resources/conf;

正则表达式应匹配

MI4/Search/Service/src/main/resources/META-INF;
MI4/Search/Service/src/main/resources/conf;

1 个答案:

答案 0 :(得分:0)

首先,目录可以用扩展名命名,因此检查路径中是否存在扩展名不是一种可靠的方法来确定某些内容是否真的是文件或目录。实际上,您可以确定路径是目录还是文件名的唯一方法是使用适当的OS API,例如, Windows上为GetFileAttributes,Linux上为stat

如果这是您的要求,那么您应该拆分分号并迭代每个产生的路径,依次将每个路径送入相应的API以确定它是文件还是目录。如果你需要文本匹配,我仍然建议你拆分分号,然后将每个单独的路径与适当的正则表达式匹配。

提取扩展名的Ruby函数可能如下所示:

def get_extension(path)
  path =~ /[^\/](\.[^.\/]*)$/
  $1
end

请注意,您需要处理一些问题。例如,此正则表达式会将路径foo/bar/.hidden视为路径,而不使用扩展名。这可能不是您需要的行为。你需要适当地调整表达式。

然后,您将获得get_extension返回nil的所有路径。请告诉我们您尝试使用哪种语言,因为存在明显的语法差异。