我有一个包含很多文件的文件夹,它们是根据其中包含迭代数字的模式命名的。
我正在尝试通过 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/