所以我可以在字符串中包含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();
}
答案 0 :(得分:1)
您可以将Regex.Replace与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的“年”组中,解析为int并加了1