所以我可以在一个字符串中有 1 年或更多年,可以是 2 位数字的格式,即"18",4 位数字,即"2018",完整的日期字符串,即"12/04/2018",或组合 在 c# 中使用正则表达式,我需要遍历此字符串以获取包含任何这些格式的年份的所有值,并将其增加 1 年。
例如,此字符串
"这是一个字符串,具有 2 位数字年份 - 15,4 位数字年份 - 2015,以及从日期 01/01/2015 到日期 02/03/2016">
应该成为
"这是一个字符串,具有 2 位数字年份 - 16,4 位数字年份 - 2016,以及从日期 01/01/2016 到日期 02/03/2017">
此代码的问题在于使用索引超出范围的日期。 请问,我需要一个可以处理这 3 种格式年份的逻辑。如果它包含独立的有效年份,则标准为 2 位数字、4 位数字或日期(格式为 dd/mm/yyyy(是标准
public string Increment(string text)
{
if (text == null) return null;
var builder = new StringBuilder(text);
var matches = Regex.Matches(text, @"b(?:d{4}|d{2})b");
foreach (Match match in matches)
{
if (match.Success)
{
builder.Remove(match.Index, match.Length);
builder.Insert(match.Index, int.Parse(match.Value) + 1);
}
}
return builder.ToString();
}
您可以使用Regex.Replace with MatchEvaluator。试试这个代码
var regex = new Regex("\b(?<prefix>\d{2}/\d{2}/)?(?<year>\d{2}|\d{4})\b");
var result = regex.Replace(text, match => $"{match.Groups["prefix"].Value}{int.Parse(match.Groups["year"].Value) + 1}");
正则表达式包含两组:可选前缀和年份。在 MatchEvaluator 中,"year"组解析为 int 并递增 1
演示