VB中如何用正则表达式匹配含动态日期的CSV文件名?
VB读取带动态日期的CSV文件:正则匹配文件名的正确方式
你不能直接把正则表达式作为路径传给IO.StreamReader——它只会把这个字符串当作实际路径解析,完全不会识别正则语法,这就是你报错的原因。正确的做法是先筛选出符合正则规则的文件,再用StreamReader读取,步骤如下:
1. 定义规则与筛选文件
- 先指定目标文件夹路径,再用正则表达式定义文件名格式(你的需求是
SEBCTS开头+8位日期数字+.csv结尾,用\d{8}匹配数字比\w{8}更精准):' 目标文件夹路径 Dim folderPath As String = "\\FolderA\FolderB\" ' 匹配SEBCTS+8位数字+csv的正则 Dim fileNameRegex As New Regex("^SEBCTS\d{8}\.csv$") - 遍历文件夹,筛选出符合规则的文件:
' 获取所有符合正则的文件路径 Dim matchedFiles As IEnumerable(Of String) = Directory.EnumerateFiles(folderPath).Where(Function(filePath) Return fileNameRegex.IsMatch(Path.GetFileName(filePath)) End Function)
2. 读取目标文件
因为可能存在多个匹配文件,先判断是否找到,再读取:
If matchedFiles.Any() Then ' 取第一个匹配文件(如果每天只有一个,直接用这个;如果有多个,可按日期排序取最新) Dim targetFilePath As String = matchedFiles.First() ' 用StreamReader读取文件 Using reader As New IO.StreamReader(targetFilePath) Dim line As String ' 逐行读取处理 While (line = reader.ReadLine()) IsNot Nothing ' 这里添加你的CSV行处理逻辑 Console.WriteLine(line) End While End Using Else ' 未找到匹配文件的提示 MsgBox("未找到符合格式的CSV文件") End If
3. 进阶:取最新日期的文件
如果文件夹里有多个历史文件,想要读取最新日期的,可按文件名中的日期排序:
' 按文件名中的8位日期降序排序,取第一个(最新) Dim latestFile As String = matchedFiles.OrderByDescending(Function(file) ' 从SEBCTS后截取8位日期字符串 Return Path.GetFileNameWithoutExtension(file).Substring(6) End Function).First()
内容的提问来源于stack exchange,提问作者jbpm
相关产品推荐
相关产品推荐

