使用Regex提取fileName

时间:2009-07-08 01:31:50

标签: regex

如果我只想匹配fileName,即

C://Directory/FileName.cs中的

以某种方式使用正则表达式忽略FileName.cs之前的所有内容。

我该怎么做?

我需要这个用于我正在处理的编译UI ...不能使用编程语言,因为它只接受正则表达式。

有什么想法吗?

11 个答案:

答案 0 :(得分:13)

这样的事可能有用:

[^/]*$

它将所有字符匹配到不是“/"..

的行尾

如果要匹配使用“\”路径分隔符的路径,可以将正则表达式更改为:

[^\]*$

但是,如果您的编程语言或环境需要,请确保转义“\”字符。例如,您可能需要编写如下内容:

[^\\]*$

修改 我删除了前导“/”和尾随“/”因为它们可能不会引起混淆,因为它们实际上不是regEx的一部分,但它们在表示正则表达式时非常常见。

当然,根据regEx引擎支持的功能,您可以使用前瞻/后视和捕获来制作更好的regEx。

答案 1 :(得分:7)

您使用的是哪种语言?你为什么不使用那种语言的标准路径机制?

http://msdn.microsoft.com/en-us/library/system.io.path.aspx怎么样?

答案 2 :(得分:4)

根据您对需要排除与“abc”不匹配的路径的评论,请尝试以下操作:

^.+/(?:(?!abc)[^/])+$


在正则表达式评论模式中完全拆分,即:

(?x)     # flag to enable comments
^        # start of line

.+       # match any character (except newline)
         #   greedily one or more times
/        # a literal slash character

(?:      # begin non-capturing group
  (?!      # begin negative lookahead
           # (contents must not appear after the current position)
    abc      # literal text abc
  )        # end negative lookahead
  [^/]     # any character that is not a slash
)        # end non-capturing group
+        # repeat the above nc group one or more times
         #   (essentially, we keep looking for non-backspaces that are not 'abc')

$        # end of line

答案 3 :(得分:1)

我迟到了,我也忽略了正则表达式的要求,因为正如J-16 SDiZ指出的那样,有时会有更好的解决方案。即使问题是4年,寻找简单解决方案的人也值得选择。

尝试使用以下内容:

public string ConvertFileName(string filename)
    {
        string[] temparray = filename.Split('\\');
        filename = temparray[temparray.Length - 1];
        return filename;
    }

此方法将字符串拆分为“\”字符,将结果字符串存储在数组中并返回数组的最后一个元素(文件名)。

虽然OP似乎是为UNIX编写的,但要弄清楚如何根据您的特定需求定制它并不需要太多。

答案 4 :(得分:1)

为我做的正则表达式是

[^\/]*$

答案 5 :(得分:0)

我会使用:。 /(。 $)

括号标记一个组,它是文件名。 您使用的正则表达式可能会有所不同,取决于正则表达式语法(PCRE,POSIX)

我觉得你使用正则表达式工具,有几个用于windows和linux:

Windows - http://sourceforge.net/projects/regexcreator/

Windows - http://weitz.de/regex-coach/

Linux - kodos

希望有所帮助

答案 6 :(得分:0)

只是miky的一个变体,适用于两个文件系统路径字符: [^\\/]*\s

答案 7 :(得分:0)

假设文件名具有特殊字符,特别是在支持特殊字符允许的文件名的MAC时,服务器端Path.GetFileName(fileName)失败并因路径中的非法字符而引发错误。以下使用正则表达式的代码来救援。

以下正则表达式处理2件事

  1. 在IE中,上传文件时,文件路径也包含文件夹(即c:\ samplefolder \ subfolder \ sample.xls)。下面的表达式将用空字符串替换所有文件夹并保留文件名

  2. 在Mac中使用时,filename是唯一提供的Safari浏览器,并允许使用文件名中的特殊字符。

    var regExpDir = @"(^[\w]:\\)([\w].+\w\\)";
    
    var fileName = Regex.Replace(fileName, regExpDir, string.Empty);
    

答案 8 :(得分:0)

我在Powershell中没有RegEx的情况下做到了这一点:

  1. 将链接放入变量
  

$ Link =“ http://some.url/some/path/file.name

  1. 将链接拆分为“ /”字符
  

$ split = $ Link.Split(“ /”)

  1. 计算分裂
  

$ SplitCount = $ Split.Count

  1. 定位文件名
  

$ Split [$ SplitCount -1]

完整代码:

$Link = "http://some.url/some/path/file.name"
$Split = $Link.Split("/")
$SplitCount = $Split.Count
$Split[$SplitCount -1]

答案 9 :(得分:0)

没有提到一个具有前瞻性和向后看的相当优雅的解决方案:

(?<=。+)(?=。cs)

答案 10 :(得分:0)

看到文件名可以被某些人解释为基本名。然后,此示例可以提取由于某种原因可能没有扩展名的任何文件的文件名/基名。它也可以以相同的方式获取最后一个目录。

您可以在此处查看其工作方式并进行测试。 https://regexr.com/4ht5v

正则表达式为:

.+?\\(?=\w+)|\.\w+$|\\$


之前:

C:\Directory\BaseFileName.ext

C:\Directory\BaseFileName

C:\This is a Directory\Last Directory With trailing backslash\

C:\This is a Directory\Last Directory Without trailing backslash

之后:

BaseFileName

BaseFileName

Last Directory With trailing backslash

Last Directory Without trailing backslash

为了完整起见,如果有人需要它,它将与JavaScript一起使用。

// Example of getting a BaseFileName from a path

var path = "C:\\Directory\\FileName.cs";
var result = path.replace(/.+?\\(?=\w+)|\.\w+$|\\$/gm,"");
console.log(result);