0

我正在 VB.NET 中创建一个程序来输出多个图像。某些图像将具有相同的文件名。如果有多个同名文件,我想在文件名末尾添加“_1_”。如果“_1_”文件已经存在,我想将 1 增加到“_2_”。如果这个文件已经存在,我想继续增加数字直到它不存在。例如“文件名”、“文件名_1_”、“文件名_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)中完成。

有任何想法吗?

谢谢!

瑞安

4

1 回答 1

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
于 2012-06-21T18:08:01.947 回答