使用Regex.Replace增加正则表达式匹配

时间:2012-06-21 17:33:21

标签: regex vb.net vb.net-2010

我在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)中完成。

有什么想法吗?

谢谢!

赖安

1 个答案:

答案 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