提问人:trinalbadger587 提问时间:8/17/2021 最后编辑:trinalbadger587 更新时间:8/18/2021 访问量:33
替换多个“匹配”,而不受“MatchEvaluator”限制
Replace multiple `Match`es without `MatchEvaluator`'s restrictions
问:
我的应用程序在日期字符串中查找数字,例如或 .13/7/2019
7/13/2019
它用月份和日期替换它们。mm
dd
如果只找到一个数字(例如),则应假定它一定是日期。6 July 2019
如果不是,那么数字将是日期,另一个数字将是月份。>12
它使用查找数字Regex.Matches(inputString, @"\d{1,2}")
查看比赛后,我有 2 个变量 ()。Match? monthMatch, dayMatch
然后我做了一个字典:
Dictionary<Match, string> matches = new();
if (monthMatch != null)
matches.Add(monthMatch, "mm");
if (dayMatch != null)
matches.Add(dayMath, "dd");
问题是我怎样才能替换我拥有的。Dictionary<Match, string>
使用朴素的方法,在我第一次替换后,字符串中的索引会更改,而第二次替换会惨遭失败。
例如。7/13/2019
-> dd/13/2019
-> ddmm3/2019
我怎样才能确保替换是根据它们在原始字符串中的索引而不是中间替换进行替换的。
答:
0赞
trinalbadger587
8/17/2021
#1
我的解决方案是按索引的降序对它们进行排序,以便对象的索引在每次替换后仍然有效。Match
public static string SafeSubstitution (string input, Dictionary<Match, string> substitutions)
{
foreach (var (match, replaceWith) in substitutions.OrderByDescending(s => s.Key.Index))
{
string subResult = match.Result(replaceWith);
input = string.Concat(input.Substring(0, match.Index), subResult, input.Substr(match.Index + match.Length));
}
return input;
}
上一个:检查数组中的目录名称
评论