Regex reg = new Regex(@"^[0-9]*\.wav");
Stack<string> wavefiles= new Stack<string>(Directory.GetFiles("c:\\WaveFiles", "*.wav").Where(path => reg.IsMatch(path)));
我在上面的代码中尝试做的是获取名称只有数字的所有wave文件。例如“123.wav”
当我尝试上面的代码时,它不会返回任何文件?
我的代码有什么问题?
答案 0 :(得分:3)
您也可以在没有正则表达式的情况下执行此操作
var files = Directory.GetFiles("c:\\WaveFiles", "*.wav")
.Where(f => Path.GetFileNameWithoutExtension(f).All(char.IsDigit));
答案 1 :(得分:1)
Directory.GetFiles
为您提供包含路径的文件名列表。您试图在结果上匹配您的正则表达式,如下所示:
&#34; C:\ WaveFiles \ 123.wav&#34;
您希望整个字符串以数字开头,然后只包含&#34; .wav&#34;部分,当然不会匹配任何文件。
您可能还希望将[0-9]
替换为\d
的数字,但这是首选项。
试试这个:
Regex reg = new Regex(@"^\d+\.wav");
string[] waveFilePaths = Directory.GetFiles("C:\\WaveFiles", "*.wav");
Stack<string> filesWithOnlyDigits = new Stack<string>(waveFilePaths
.Where(path => reg.IsMatch(Path.GetFileName(path))));
答案 2 :(得分:0)
你的正则表达式字符串有点偏,但还不错。我真的这么做了
Regex(@"^\d+\.wav$");
将匹配所有文件名,这些文件名具有一个或多个数字作为其名称,wav作为其扩展名。
这里真正的问题是你的所有字符串都以C:\WaveFiles\
开头,这就是你的正则表达式失败的原因。
您需要添加一行以从完整路径中获取文件名:
Path.GetFilename(path);
答案 3 :(得分:0)
Regex reg =新的正则表达式(@&#34; ^ [0-9] .wav&#34;); wavefiles = new Stack(Directory.GetFiles(FolderName,&#34; .wav&#34;)。Where(path =&gt; reg.IsMatch(Path.GetFileName(path))));