【发布时间】:2017-04-19 01:20:57
【问题描述】:
我想使用正则表达式来获取不带扩展名的文件名。我无法让正则表达式返回一个值。我有这个:
string path = @"C:\PERSONAL\TEST\TESTFILE.PDF";
var name = Regex.Match(path, @"(.+?)(\.[^\.]+$|$)").Value;
在这种情况下,name 总是返回为C:\PERSONAL\TEST\TESTFILE.PDF。我做错了什么,我认为我的搜索模式是正确的?
(我知道我可以使用Path.GetFileNameWithoutExtension(path);但我特别想尝试使用正则表达式)
【问题讨论】:
-
当存在完美的框架方法时,为什么要为此使用正则表达式?你可以使用正则表达式,但你手上会有一个额外的问题。
-
但是为什么呢?寻找trouble?
-
如果这只是为了学习正则表达式,那很好,但绝对没有充分的理由为此使用正则表达式。事实上,我认为正则表达式应该是解决大多数问题时的最后手段。
-
你做错的是调用一个方法而不先在 MSDN 上查找它,得到一个你不期望的结果,然后 仍然 不费心去阅读文档。你不知道
Regex.Match()返回了什么,显然不是你猜到的,所以你来这里请人大声朗读 MSDN 页面给你听。 -
如果 MSDN 太吓人,运行它并在它后面添加一个断点:
var result = Regex.Match(path, @"(.+?)(\.[^\.]+$|$)");将鼠标悬停在result上,看看方法返回了什么。这就是编程。