【发布时间】:2014-07-19 23:43:36
【问题描述】:
我在迭代 txt 文件的文件名方面遇到了一点问题。我的文件名格式是这样的:<date>-<year>_filename-<number>.txt。问题是当<number> 达到9 时,文件名停止迭代。
文件名如下:
31-2014_filename-1
31-2014_filename-2
31-2014_filename-3
31-2014_filename-4
31-2014_filename-5
31-2014_filename-6
31-2014_filename-7
31-2014_filename-8
31-2014_filename-9
31-2014_filename-10
该函数最多只能检测到 9。超出该数字的任何内容都将被忽略。 下面是代码
Dim lastreport As Integer = 1
Public Sub GetLastNo(ByVal filePath As String)
Dim lastFile As String = 1
Dim files() As String = Directory.GetFiles(filePath, "*.txt")
For Each File As String In files
File = Path.GetFileNameWithoutExtension(File)
Dim numbers As MatchCollection = Regex.Matches(File, "(?<num>[\d]+)")
For Each number In numbers
number = CInt(number.ToString())
If number > 0 And number < 1000 And number > lastFile Then
lastFile = number
End If
lastreport = number
Next
Next
End Sub
【问题讨论】:
-
没有必要将
\d放在字符类([…])中,因为它已经是一个字符类(当然,除非你想组合多个字符类)。 -
@Richard 先生,那就是
(?<num>\d+),对吗? -
是的,没错。
-
先生,我已经改过了,但问题仍然存在。
-
我使用了评论,因为这不是你的问题,只是一个附带问题。为了解决这个问题,我将开始查看您得到的
MatchCollection的内容:我希望每个文件有三个匹配项……就我个人而言,我会寻找一个正则表达式来匹配文件名中的所有三个数字,所以我知道我'正在处理正确的数字,而不是依靠条件来分隔不同的匹配项。
标签: regex vb.net iteration filenames