如果我只想匹配fileName
,即
C://Directory/FileName.cs
中的以某种方式使用正则表达式忽略FileName.cs
之前的所有内容。
我该怎么做?
我需要这个用于我正在处理的编译UI ...不能使用编程语言,因为它只接受正则表达式。
有什么想法吗?
答案 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件事
在IE中,上传文件时,文件路径也包含文件夹(即c:\ samplefolder \ subfolder \ sample.xls)。下面的表达式将用空字符串替换所有文件夹并保留文件名
在Mac中使用时,filename是唯一提供的Safari浏览器,并允许使用文件名中的特殊字符。
var regExpDir = @"(^[\w]:\\)([\w].+\w\\)";
var fileName = Regex.Replace(fileName, regExpDir, string.Empty);
答案 8 :(得分:0)
我在Powershell中没有RegEx的情况下做到了这一点:
$ Link =“ http://some.url/some/path/file.name”
$ split = $ Link.Split(“ /”)
$ SplitCount = $ Split.Count
$ 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);