VB.Net - 使用正则表达式过滤文件名

时间:2011-12-08 10:55:40

标签: .net regex replace find expression

我认为我过于复杂,但我正在寻找一个VB.Net代码来“过滤”文件名。

方案: 我的公司在服务器上有一个文件夹,上面有超过65,000个文件。读取这些文件的新计算机区分大小写,只接受“* .S4”文件扩展名。

所以,我需要将所有文件名转换为“* .S4”,但我希望选择用我指定的模式替换每个文件。

例如:

查找> test.s4

替换> test_1.S4

使用模式:

查找> * .s4

替换> * _1.S4

到目前为止我所拥有的代码(不起作用):

    'Inputs:
    Dim Filename As String = "ThisIsAnExample.s4"
    Dim Find As String = "*.s4"
    Dim Replace As String = "*.S4"

    Find = Find.Replace("*", "(.*)")
    Replace = Replace.Replace("*", "(.*)")

    Dim rgxExp As New System.Text.RegularExpressions.Regex(Find)

    MsgBox(rgxExp.Replace(Filename, Replace))

我知道它可能,我在Javascript中写了一个类似的脚本。

2 个答案:

答案 0 :(得分:0)

你不能这样做吗?

  Dim input As String = "ThisIsAnExample.s4"
  Dim pattern As String = "\.s4$"
  Dim replacement As String = ".S4"
  Dim rgx As New Regex(pattern)
  Dim result As String = rgx.Replace(input, replacement)

  Console.WriteLine("Original String: {0}", input)
  Console.WriteLine("Replacement String: {0}", result)    

答案 1 :(得分:0)

如果您想使用c#而不使用正则表达式,可以使用以下

    private void UppercaseExtension(string filepath)
    {
        //ensure the source file exists
        if (!File.Exists(filepath))
            return;

        //get the parts of the filepath
        string filename = Path.GetFileNameWithoutExtension(filepath);
        string extension = Path.GetExtension(filepath).ToUpperInvariant();
        string folderPath = Path.GetDirectoryName(filepath);
        try
        {
            //rename the file using the uppercase extension
            File.Move(filepath, Path.Combine(folderPath, filename + extension));
        }
        catch (Exception ex)
        {
            //failed to rename
        }
    }

如果您想限制文件类型,可以在方法中添加检查以执行此操作,或者可以限制传递给它的文件路径。