Я не уверен, что регулярные выражения являются лучшим подходом, но они должны работать.
ReplaceWithX
заменяет каждый отдельный символ (указанный .
) на x
.
ReplaceWithXLeave4
заменяет все символы, кроме последних четырех, на x
.Это достигается путем сопоставления любого отдельного символа (.
) при использовании отрицательного прогнозирующего утверждения нулевой ширины для исключения этого совпадения для последних четырех символов.
using System;
using System.Text.RegularExpressions;
namespace ReplaceRegex
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(ReplaceWithX("12345678"));
Console.WriteLine(ReplaceWithXLeave4("12345678"));
}
static string ReplaceWithX(string input)
{
return Regex.Replace(input, ".", "x");
}
static string ReplaceWithXLeave4(string input)
{
return Regex.Replace(input, ".(?!.{0,3}$)", "x");
}
}
}
И дляполнота, вот как это выглядит, если не использовать регулярные выражения.Этот подход, вероятно, несколько быстрее, чем подход регулярных выражений, даже если вы никогда не увидите разницу в производительности, если просто сделаете это один или два раза, как в этих примерах.Другими словами, если вы делаете это на сервере с большим количеством запросов, избегайте регулярных выражений, так как его читать немного легче.
using System;
using System.Text;
namespace ReplaceNoRegex
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(ReplaceWithX("12345678"));
Console.WriteLine(ReplaceWithXLeave4("12345678"));
}
static string ReplaceWithX(string input)
{
return Repeat('x', input.Length);
}
static string ReplaceWithXLeave4(string input)
{
if (input.Length <= 4)
return input;
return Repeat('x', input.Length - 4)
+ input.Substring(input.Length - 4);
}
static string Repeat(char c, int count)
{
StringBuilder repeat = new StringBuilder(count);
for (int i = 0; i < count; ++i)
repeat.Append(c);
return repeat.ToString();
}
}
}