regex - 查找文件夹中编号最大的文件名

标签 regex vb.net linq filenames dir

我有一个包含很多文件的文件夹,它们是根据其中包含迭代数字的模式命名的。

我正在尝试通过 vb.net 保存新文件。目的是用文件夹最大编号+1来命名

我在互联网上查找了很多有关 regex 和 Linq 的内容,这帮助我编写了以下代码:

If tmpFileName.Contains("%num%") Then
        Dim lastFileNo As Integer = 1
        Dim tmpFName = Dir(frmMain.saveLocalTFPath & "*.docx")
        Dim numbers() As Integer = Regex.Split(tmpFName, "(?<alpha>[\w-[0-9]]+)(?<num>[\d]+)").Skip(1).Select(Function(s) Integer.Parse(s)).ToArray
        For Each element In numbers
            If element > 0 And element < 999 And element > lastFileNo Then lastFileNo = element
        Next
        Do Until tmpFName = ""
            numbers = Regex.Split(tmpFName, "(?<alpha>[\w-[0-9]]+)(?<num>[\d]+)").Skip(1).Select(Function(s) Integer.Parse(s)).ToArray
            For Each element In numbers
                If element > 0 And element < 1000 And element > lastFileNo Then lastFileNo = element
            Next
            tmpFName = Dir()
        Loop
        tmpFileName = tmpFileName.Replace("%num%", lastFileNo)
    End If

但它没有按预期工作。这是我在 Linq 和 Regex 中的第一个代码吗?我不习惯检测代码中的错误。 有人可以给点提示吗?

谢谢

最佳答案

我很确定你的正则表达式是错误的。稍微拆分一下代码,创建一个从文件名中提取数字的函数。例如

Function GetNumberFromFilename(ByVal filename As String) As Integer

    ' From the filename parameter, pull the number and return it
End Function

然后就很容易测试了

Console.WriteLine(GetNumberFromFilename("JCR 2013-01 data.docx"))

当你开始工作时,只需循环所有文件以获得最大的数字

Dim lastFileNo As Integer = 1
Dim files() As String = IO.Directory.GetFiles(frmMain.saveLocalTFPath, "*.docx")

For Each file As String In files
    Dim number As Integer

    number = GetNumberFromFilename(file)

    If number > 0 And number < 1000 And number > lastFileNo Then
        lastFileNo = number
    End If
Next

关于regex - 查找文件夹中编号最大的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17741713/

相关文章:

c# - Linq 分组和嵌套分组

sql-server - 在 SQL Server 中定义一对一关系

regex - 正则表达式只匹配 n 次

regex - 如何捕获两个字母?

regex - 了解这个 Perl 解决方案

.net - 判断是在 .NET 中的生产环境还是开发环境中的最佳方法

vb.net - LINQ/VB.NET 选择不同于数据集

.net - dynamic-linq Select 中的字符串连接

javascript - 将字符串的各个部分分组到数组元素中

c# - 编辑列表包含本身包含对象的对象,等等