【问题标题】:VB.Net - Using Regular Expressions to Filter a FilenameVB.Net - 使用正则表达式过滤文件名
【发布时间】:2011-12-08 10:55:39
【问题描述】:

我认为我把一些简单的事情复杂化了,但我正在寻找一个 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 写过一个类似的脚本。

【问题讨论】:

    标签: .net regex replace find expression


    【解决方案1】:

    你不能这样做吗?

      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)    
    

    【讨论】:

    • 我想选择通配符。 "(.*).s4" 然后将其替换为 "renamed_(*.).S4" 明白我的意思吗?基本上根据用户输入重新格式化文件名,我自己不会使用这个程序。其他,非计算机知识的人会。他们了解通配符的基础知识。
    • @Rob 哈哈。好的,但你写的不是有效的正则表达式。只需在重新格式化之前和之后提供更多示例,我就会找到您需要的正则表达式:)
    • 不过,总的来说,这是可行的。我对正则表达式没有那么有经验,但我认为“\”表示它不是一开始的?而“$”代表行尾?
    • @Rob 实际上 \ 只是为了逃避点,而 $ 如你所说,是行尾。
    • 哦,对了。因为否则它被认为是正则表达式中的通配符……这也许是我遇到一些问题的原因。我没有逃脱任何特殊字符。 =\
    【解决方案2】:

    如果您想使用不带正则表达式的 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
            }
        }
    

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

    【讨论】:

    • 这在我看来不像 VB :)
    • 抱歉看到我只看到.net 的标签,如果您需要 vb 示例,请询问,我会为您转换。应该不会太不同。
    • 我什么都不想要 :) 我不是 OP ;)
    • 对不起 53AN,因为我的声誉很低,它告诉我我只能有 5 个标签?我不得不删除其余的-.-
    • 如果我也需要的话,我可以很容易地把它翻译成 VB.Net。不用担心!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 2016-03-05
    • 2023-03-02
    • 2010-09-26
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多