我需要用相同的数字加10000来替换一些2位和3位数字.所以
Photo.123.aspx
需要成为
Photo.10123.aspx
并且
Photo.12.aspx
需要成为
Photo.10012.aspx
我知道在.NET中我可以将替换委托给一个函数,只需要在数字上加10000,但如果可以的话,我宁愿坚持使用花园种类的RegEx.有任何想法吗?
我认为使用RegEx进行匹配,并且替换函数最适合在这种情况下,你正在做简单的数学运算,使用专门设计的东西......
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"))); } } }
它有什么理由VB.NET
吗?
s( Photo\. (\d{2,3}) \.aspx ){ "Photo." . ($1 + 10000) . ".aspx" }xe