使用正则表达式替换为数字添加10000?

Her*_*ill 2 regex vb.net

我需要用相同的数字加10000来替换一些2位和3位数字.所以

Photo.123.aspx
Run Code Online (Sandbox Code Playgroud)

需要成为

Photo.10123.aspx
Run Code Online (Sandbox Code Playgroud)

并且

Photo.12.aspx
Run Code Online (Sandbox Code Playgroud)

需要成为

Photo.10012.aspx
Run Code Online (Sandbox Code Playgroud)

我知道在.NET中我可以将替换委托给一个函数,只需要在数字上加10000,但如果可以的话,我宁愿坚持使用花园种类的RegEx.有任何想法吗?

Mit*_*ers 6

我认为使用RegEx进行匹配,并且替换函数最适合在这种情况下,你正在做简单的数学运算,使用专门设计的东西......


Dan*_*ane 6

James是对的,你想使用带有MatchEvaluator参数的Regex.Replace方法.您可以在匹配评估程序委托中获取匹配中获得的数字字符串,并将其转换为可以添加10,000的数字.我使用lambda表达式代替显式委托,因为它更紧凑和可读.

using System;
using System.Text.RegularExpressions;

namespace RenameAspxFile
{
    sealed class Program
    {
        private static readonly Regex _aspxFileNameRegex = new Regex(@"(\S+\.)(\d+)(\.aspx)", RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase);
        private static readonly string[] _aspxFileNames= {"Photo.123.aspx", "Photo.456.aspx", "BigPhoto.789.aspx"};

        static void Main(string[] args)
        {
            Program program = new Program();
            program.Run();
        }

        void Run()
        {
            foreach (string aspxFileName in _aspxFileNames)
            {
                Console.WriteLine("Renamed '{0}' to '{1}'", aspxFileName, AddTenThousandToPhotoNumber(aspxFileName));
            }
        }

        string AddTenThousandToPhotoNumber(string aspxFileName)
        {
            return _aspxFileNameRegex.Replace(aspxFileName, match => String.Format("{0}{1}{2}", match.Result("$1"), Int32.Parse(match.Result("$2")) + 10000, match.Result("$3")));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Bra*_*ert 5

它有什么理由VB.NET吗?

Perl的

s(
  Photo\. (\d{2,3}) \.aspx
){
  "Photo." . ($1 + 10000) . ".aspx"
}xe
Run Code Online (Sandbox Code Playgroud)