Поиск по этому блогу

воскресенье, 22 апреля 2012 г.

Регулярные выражения в C# часть 2

Продолжение темы. Пара дополнений + пара примеров.

Классы пространства имен System.Text.RegularExpressions

Capture - Представляет результаты из отдельной записи части выраже-
ния. Capture представляет одну подстроку для отдельной успешной записи.

CaptureCollection - Представляет последовательность подстрок записи.

CaptureCollection возвращает набор записей, сделанных одной группой записи.

Group - Group представляет результаты отдельной группы записи.
Группа записи может записать ноль, одну или более строк в одно совпадение из-за кванторов, таким образом Group предоставляет коллекцию объектов Capture.

GroupCollection - Представляет коллекцию групп записи. GroupCollection возвращает набор групп записи в одном совпадении.

Match - Представляет результаты из отдельного совпадения регулярного выражения.

MatchCollection - Представляет набор успешных совпадений, обнаруженных путем итеративного применения шаблона регулярного выражения к входной строке.

Regex - Представляет постоянное регулярное выражение.

RegexCompilationInfo - Представляет сведения о регулярном выражении, используемые для компиляции регулярного выражения в отдельную сборку.

RegexRunner - Класс RegexRunner является базовым классом для скомпилированных регулярных выражений.

RegexRunnerFactory - Создает класс RegexRunner для скомпилированного регулярного выражения.


Примеры:

String e_mail = "name@gmail.";  
  
public bool isValidMail(string e_mail)  
{  
   string expr =   
     "[.\\-_a-z0-9]+@([a-z0-9][\\-a-z0-9]+\\.)+[a-z]{2,6}";  
      
   Match isMatch =   
     Regex.Match(e_mail, expr, RegexOptions.IgnoreCase);  
      
   return isMatch.Success;  
}  

Данный метод принимает входной e-mail и выдает true/false в зависимости от того, валидное ли имя адреса электронной почты. В данном случае метод вернет false поскольку в адресе электронной почты не указан домен.


public List<string> GetWithIn(string str)  
{     
    List<string> rez = new List<string>();  
  
    Regex pattern = new Regex(@"(?<=\().*?(?=\))");  
    foreach (Match m in pattern.Matches(str))  
        if(m.Success)  
            //меж скобок ( )  
            rez.Add(m.Groups["val"].Value);  
  
    return rez;  
}  

Получает входную строку и с помощью так называемых групп находит все вхождения между парами круглых скобок «(...)».


String GetReplacedText(string text)  
{  
   //ищем значение для тега src  
   Regex re = new Regex(  
      @"(?<=<img .*?src\s*=\s*"")[^""]+(?="".*?>)");  
      //или   
      //@"\< *[img][^\>]*[src] *= *[\"\']{0,1}([^\"\'\ >]*)"  
  
   //получаем набор значений для аттрибута src       
   MatchCollection mc = re.Matches(text);  
          
   List<string> al = new List<string>();  
   foreach (Match m in mc)//пробегаем по набору аттрибутов src  
       //выделяем только расширение файла  
       al.Add(System.IO.Path.GetExtension(m.Value));  
  
   int k = 0;  
     
   string replacedText = re.Replace(text, delegate(Match m)   
            { return "Images/"+(++k).ToString()+al[k-1]; } );  
      
    return replacedText;  
}  

Получаем тег <img src="..." /> и заменить его содержимое


@"^[a-zA-Zа-яА-Я,-;:]+$"   
  
или   
  
@"[a-zA-Zа-яА-Я,-;:]{5,50}"


Проверка адресса (сайтов). Последний вариант имеет ограничения от 5 до 50 символов.



string newStr =   
   Regex.Replace("Обычна 12 строка с 75 числами",  
                 @"\D", string.Empty);  

Удаление чисел (цифр) из текста

Комментариев нет:

Отправить комментарий