Неподписанный символ использует бит, который резервируется для знака регулярного символа как другое число. Это изменяет диапазон на [0 - 255] в противоположность [-128 - 127].
Вообще неподписанные символы используются, когда Вы не хотите знак. Это будет иметь значение при выполнении вещей как смещающиеся биты (сдвиг расширяет знак), и другие вещи при контакте с символом как байт вместо того, чтобы использовать его в качестве числа.
Попробуйте использовать версию Regex.Replace
, которая вызывает функцию, чтобы определить, каким должен быть текст замены:
public string Replace(string, MatchEvaluator);
http://msdn.microsoft.com/ en-us / library / aa332127 (VS.71) .aspx
Затем функция может просмотреть совпавший текст (объект Match
предоставляется в качестве аргумента функции оценщика) и вернуть строку с правильным расчетным значением.
Если вы используете 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();
}
)
);
Попробуйте
val = Regex.Replace("xxx", @"(?<exes>x{1,6})", new MatchEvaluator(ComputeReplacement));
с примером MatchEvaluator ниже
public String ComputeReplacement(Match matchResult) {
return matchResult.Value.Length.ToString();
}
(частично украдено из Поваренной книги регулярных выражений - моя библия, ха-ха)