Сейчас я и хочу просто поделиться несколькими наиболее часто применяемыми конструкциями.
Кстати, появилось еще несколько примерчиков:
Регулярные выражения в c#
1. Проверка e-mail:
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 поскольку в адресе электронной почты не указан домен первого уровня.
2. Получить все подстроки между круглыми скобками:
string str =
@"Обычная (случайная) строка
(последовательность символов).
И еще просто набор цифр - (как число)";
public List<string> GetWithIn(string str)
{
List<string> rez = new List<string>();
Regex pattern =
new Regex(@"\((?<val>.*?)\)",
RegexOptions.Compiled |
RegexOptions.Singleline);
foreach(Match m in pattern.Matches(str))
if(m.Success)
//меж скобок ( )
rez.Add(m.Groups["val"].Value);
return rez;
}
Метод GetWithIn получает входную строку и с помощью так называемых групп находит все вхождения между парами круглых скобок «(...)». Того же результата можно добиться и без применения группировок:
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;
}
3. Получить тег <img src="..." /> и заменить его содержимое
Пришлось как то реализовать полуавтоматическое добавление статей на сайте. Схема заключалась в автоматическом поиске исходного html-текста статьи всех вхождений тега <img>. Для каждого из них необходимо было изменить путь и имя графического файла в атрибуте src.
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 имело такой вид:
<img src="d:/someImage.gif" /> и <img src="c:/MyFolder/anotherImageFile.png" alt="Just Alt Text" />,
то после замены мы получим следующее:
<img src=<Images/1.gif< /> и <img src=<Images/2.png< alt=<Just Alt Text< />,
сохранив расширения файлов, но заменив их новым адресом и именем файла.
4. А вот вариант для проверки адреса.
В исходной строке допустимы лишь буквы латиницы, кириллицы и знаки препинания:
@"^[a-zA-Zа-яА-Я,-;:]+$"
или
@"[a-zA-Zа-яА-Я,-;:]{5,50}"
В последнем варианте требуется ввести минимум 5 и максимум 50 знаков.
5. Удаление чисел (цифр) из текста
string newStr =
Regex.Replace("Обычна 12 строка с 75 числами",
@"\D", string.Empty);
Получим строку "Обычная строка с числами"
Это были самые часто используемые примеры. Я не стал рассматривать простые задачи поскольку их примеров просто валом в интернете, но когда действительно требуется написать что то посеръёзней, приходится долго таки искать. Поэтому приглашаю всех к дополнению интересными регулярными выражениями данную и последующие статьи.