Если вы знаете, что регулярное выражение всегда будет иметь две группы, захватив, то вы можете Regex регулярное выражение, так сказать.
private Regex captures = new Regex(@"\(.+?\)");
public string ConstructFolderName(string firstGroup, string secondGroup, string pattern)
{
MatchCollection matches = captures.Matches(pattern);
return pattern.Replace(matches[0].Value, firstGroup).Replace(matches[1].Value, secondGroup);
}
Очевидно, что это не проверка ошибок и может быть лучше выполнена с помощью другого метода, кроме String.Replace; но это, безусловно, работает и должно дать вам некоторые идеи.
EDIT: явное улучшение было бы на самом деле использовать шаблон для проверки firstGroup
и secondGroup
строк, прежде чем строить их. Элементы 0 и MatchCollection
0 и 1 могут создать собственное Regex и выполнить там матч. Я могу добавить это, если хотите.
EDIT2: Вот подтверждение я говорил:
private Regex captures = new Regex(@"\(.+?\)");
public string ConstructFolderName(string firstGroup, string secondGroup, string pattern)
{
MatchCollection matches = captures.Matches(pattern);
Regex firstCapture = new Regex(matches[0].Value);
if (!firstCapture.IsMatch(firstGroup))
throw new FormatException("firstGroup");
Regex secondCapture = new Regex(matches[1].Value);
if (!secondCapture.IsMatch(secondGroup))
throw new FormatException("secondGroup");
return pattern.Replace(firstCapture.ToString(), firstGroup).Replace(secondCapture.ToString(), secondGroup);
}
Кроме того, я мог бы добавить, что вы можете изменить вторую группу захвата к ([0-9ABa-c]+)
, так как А к В самом деле не диапазон.
Большое спасибо - это прекрасно. Я знал, что это никогда не будет самым изящным решением, но оно решает проблему управления шаблоном в разных местах. – youwhut