我在VB.NET中创建一个程序来输出多个图像。某些图像将具有相同的文件名。如果有多个同名文件,我想添加" _1 _"到文件名的末尾。如果" _1 _"文件已存在我想将1增加为" _2 _"。如果此文件已存在,我想继续增加它不存在的数字ultil。例如" filename",filename_1 _"," filename_2 _"等等。这是我尝试过的代码
Dim usedFiles As New List(Of String)
While usedFiles.Contains(returnValue)
If Regex.IsMatch(returnValue, "[_]([0-9]{1,})[_]$") Then
returnValue = Regex.Replace(returnValue, "[_]([0-9]{1,})[_]$", "_" + (CType("$1", Integer) + 1).ToString() + "_")
Else
returnValue += "_1_"
End If
End While
usedFiles.Add(returnValue)
不起作用的一行是:
returnValue = Regex.Replace(returnValue, "[_]([0-9]{1,})[_]$", "_" + (CType("$1", Integer) + 1).ToString() + "_")
输出" filename_2 _"每次。我也尝试过:
returnValue = Regex.Replace(returnValue, "[_]([0-9]{1,})[_]$", "_($1+1)_")
但是这会返回" filename _($ 1 + 1)_"。我知道我可以删除" _"然后在数字上加1,然后输入" _"回到两边,但我也知道这可以使用正则表达式在其他语言(如php)中完成。
有什么想法吗?
谢谢!
赖安
答案 0 :(得分:1)
我没有花时间弄清楚你的RegEx表达式有什么问题,因为它对我来说似乎很愚蠢。你在想它。你需要做的就是这样简单:
Dim fileName As String = returnValue
Dim i As Integer = 0
While usedFiles.Contains(returnValue)
i = i + 1
returnValue = fileName + "_" + i.ToString() + "_"
End While