使用String.Format创建正则表达式

Dor*_*mer 2 c# regex string-interpolation

从本质上讲,我有一个用于插值的字符串:Log_{0}.txt并且{0}在不同的过程中将其替换为整数。因此结果可能类似于Log_123.txtLog_53623432.txt

我正在尝试使用检查数字的正则表达式string.Format()替换{0}。最终,我也希望能够提取这些数字。

我已经尝试过一些类似的变体,但是我没有任何运气:

var stringFormat = new Regex(string.Format("Log_{0}.txt", @"^\d$"));
Run Code Online (Sandbox Code Playgroud)

另外,这是检查格式的代码:

        var fileNameFormat = new Regex(string.Format("Log_{0}.txt", @"^\d+$"));

        var existingFiles = Directory.GetFiles("c:\\projects\\something");

        foreach(var file in existingFiles)
        {
            var fileName = Path.GetFileName(file);
            if(fileNameFormat.Match(fileName).Success)
            {
                // do something here
            }              
        }
Run Code Online (Sandbox Code Playgroud)

jus*_*ame 5

问题出在您的正则表达式中。^断言行的开头和行的$结尾。只需将其替换为它,@"\d+"它应该可以工作。

(可选)您可以new Regex(string.Format("^Log_{0}.txt$", @"\d+"));用来确保没有匹配诸如asdffff_Log_13255.txt.temp之类的文件。