N
NikSoft
Часто бывает необходимо заменить вхождение нескольких регулярных выражений в данном тексте.
Использование делегата решает эту задачу, задействуя только один обьект типа Regex, как, например, в следующем коде.
Здесь необходимо заменить в строке source одиночный апостроф на двойной и удалить лишние пробелы.
Делегат MatchEvaluator вызывает функцию CaptureText, когда найдено вхождение регулярного выражения. Тексты классов RegExprs и ColorConsole приводятся ниже.
Дополнительную информацию по рег выражениям можно найти здесь
https://codeby.net/threads/13187.html
https://codeby.net/threads/13394.html
Использование делегата решает эту задачу, задействуя только один обьект типа Regex, как, например, в следующем коде.
Код:
using System;
using System.Text.RegularExpressions;
namespace DelegatesInRegExprs
{
class Program
{
static void Main(string[] args)
{
string source = "abcd'fd sm;' cxz ,jij";
ColorConsole.WriteLine(ConsoleColor.Yellow, String.Format("source: {0}", source));
string target = RegExprs.replaceApos.Replace(source,
new MatchEvaluator(CaptureText));
ColorConsole.WriteLine(ConsoleColor.Yellow, String.Format("target: {0}", target));
Console.ReadLine();
}
static string CaptureText(Match m)
{
string result = m.ToString();
if (String.Compare(result.Substring(0, 1), "'") == 0)
{
result = "''";
}
if (String.Compare(result.Substring(0, 1), " ") == 0)
{
result = " ";
}
return result;
}
}
}
Делегат MatchEvaluator вызывает функцию CaptureText, когда найдено вхождение регулярного выражения. Тексты классов RegExprs и ColorConsole приводятся ниже.
Код:
class RegExprs
{
// ...
public static Regex replaceApos = new Regex("('|\x20+)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
// ...
}
public static class ColorConsole
{
public static void WriteLine(ConsoleColor color, string textToWrite)
{
Console.ForegroundColor = color;
Console.WriteLine(textToWrite);
Console.ResetColor();
}
}
Ссылка скрыта от гостей
https://codeby.net/threads/13187.html
https://codeby.net/threads/13394.html