Как я могу использовать расчетное значение в операции замены RegEx в C#?

Неподписанный символ использует бит, который резервируется для знака регулярного символа как другое число. Это изменяет диапазон на [0 - 255] в противоположность [-128 - 127].

Вообще неподписанные символы используются, когда Вы не хотите знак. Это будет иметь значение при выполнении вещей как смещающиеся биты (сдвиг расширяет знак), и другие вещи при контакте с символом как байт вместо того, чтобы использовать его в качестве числа.

9
задан Sinan Ünür 10 August 2009 в 21:51
поделиться

3 ответа

Попробуйте использовать версию Regex.Replace , которая вызывает функцию, чтобы определить, каким должен быть текст замены:

public string Replace(string, MatchEvaluator);

http://msdn.microsoft.com/ en-us / library / aa332127 (VS.71) .aspx

Затем функция может просмотреть совпавший текст (объект Match предоставляется в качестве аргумента функции оценщика) и вернуть строку с правильным расчетным значением.

9
ответ дан 4 December 2019 в 08:34
поделиться

Если вы используете C # 3, вы можете просто создать MatchEvaluator из лямбда-выражения:

string val = Regex.Replace(
   "xxx",
   @"(?<exes>x{1,6})",
   new MatchEvaluator(
      m => m.Groups["exes"].Value[0] + " - " + m.Groups["exes"].Value.Length.ToString()
   )
);

В C # 2 вы можете использовать делегат:

string val = Regex.Replace(
   "xxx",
   @"(?<exes>x{1,6})",
   new MatchEvaluator(
      delegate(Match m) {
         return m.Groups["exes"].Value[0] + " - " + m.Groups["exes"].Value.Length.ToString();
      }
   )
);
13
ответ дан 4 December 2019 в 08:34
поделиться

Попробуйте

val = Regex.Replace("xxx", @"(?<exes>x{1,6})", new MatchEvaluator(ComputeReplacement));

с примером MatchEvaluator ниже

public String ComputeReplacement(Match matchResult) {
  return matchResult.Value.Length.ToString();
}

(частично украдено из Поваренной книги регулярных выражений - моя библия, ха-ха)

3
ответ дан 4 December 2019 в 08:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: