0

複数の画像を出力するプログラムをVB.NETで作成しています。一部の画像は同じファイル名になります。同じ名前のファイルが複数ある場合は、ファイル名の末尾に「_1_」を追加します。「_1_」ファイルがすでに存在する場合は、1をインクリメントして「_2_」にします。このファイルがすでに存在する場合は、存在しないまで番号を増やし続けたいと思います。たとえば、「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など)でもこれを実行できることもわかっています。

何か案は?

ありがとう!

ライアン

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 に答える