
- •Алгоритми та структури даних Лекція 14. Регулярні вирази в c#
- •IsMatch - перевіряє чи містить рядок хоча б один рядок, який відповідає шаблону регулярного виразу. Повертає true – якщо відповідає, false – якщо ні.
- •Приклад 2
- •Символи повторення
- •Символи прив'язки
- •Cимволи вибору
- •Інші символи
- •Приклад 7
Приклад 7
Перевірка правильності адреси електронної пошти.
static void Main(string[] args)
{
//перевірка електронної пошти
Regex myReg1 = new Regex(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
@".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
Console.WriteLine(myReg1.IsMatch("email@email.com")); // True
Console.WriteLine(myReg1.IsMatch("t.korotune@gmail.com")); // True
Console.WriteLine(myReg1.IsMatch("@ email.com")); // False
Console.ReadKey();
}
Тут перед початком рядка регулярного виразу є символ «@» який вказує компілятору сприймати все символи буквально. Це необхідно, щоб коректно сприймався символ «\».
Ще є такий шаблон для перевірки поштової адреси
string pattern = @"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$";
Приклад 8. Перевірка прізвища і імені (тільки літери)
Regex regex = new Regex(@"^[А-ЯЁ][а-яё]+ [А-ЯЁ][а-яё]+$");
Match match = regex.Match(name);
([А-ЯЁ][а-яё]+[\-\s]?){3,}
Параметри пошуку
Розглянемо другий конструкторі Regex, який приймає в якості другого аргументу значення перелічування RegexOptions. У цьому перелічуванні є наступні значення:
IgnoreCase - ігнорування регістра при пошуку. Знаходить відповідності незалежно великими або малими літерами в рядку написано слово;
RightToLeft - пошук буде виконаний справа наліво, а не зліва направо;
Multiline - багаторядковий режим пошуку. Змінює роботу спец-символів «^» і «$» так, що вони відповідають початку і кінцю кожного рядка, а не тільки початку і кінця одного рядка;
Singleline - однорядковий режим пошуку;
CultureInvariant - ігнорування національних установок рядка;
ExplicitCapture - забезпечується пошук тільки буквальних відповідностей;
Compiled - регулярний вираз компілюється в збірку, що робить більш швидким його виконання але збільшує час запуску;
IgnorePatternWhitespace - ігнорує в шаблоні все неекрановані пробіли. З цим параметром шаблон «a b» буде аналогічним шаблоном «ab»;
None - використовувати пошук за замовчуванням.
Якщо необхідно встановити кілька параметрів, тоді вони поділяються оператором поразрядного «АБО» - «|».
Regex myReg = new Regex (@ "Sergey", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
Приклад 9. html парсер
Написати програму (html парсер), яка виводить на консоль та у текстовий файл вміст html документу без тегів і атрибутів.
Тест:
Вхідний файл: Input.html
<html>
<head>
<title>ПВНЗ МНТУ </title>
</head>
<body>
<p><a href="https://istu.edu.ua/">Вас вітає Міжнародний науково-технічний університет! </a>
Запрошуємо до участі у науковій конференції «Вища освіта - студентська наука - сучасне суспільство: напрями розвитку»
19 квітня 2019 року в університеті проходитиме III Міжнародна студентська науково-практична конференція
«Вища освіта - студентська наука - сучасне суспільство: напрями розвитку».
</p>
</body>
</html>
Вихідний файл: Output.txt
ПВНЗ МНТУ
Вас вітає Міжнародний науково-технічний університет!
Запрошує до участі у науковій конференції «Вища освіта - студентська наука - сучасне суспільство: напрями розвитку»
19 квітня 2019 року в університеті проходитиме III Міжнародна студентська науково-практична конференція
«Вища освіта - студентська наука - сучасне суспільство: напрями розвитку».
Варіант1. Використання регулярних виразів.
Регулярний вираз: "<[^>]*>"
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
namespace Zavd_4
{
class Program
{
private const string InputFileName = "Input.html";
private const string OutputFileName = "Output.txt";
private const string Charset = "windows-1251";
static void Main(string[] args)
{
if (!File.Exists(InputFileName))
{ Console.WriteLine("File " + InputFileName + " not found.");
return;
}
StreamReader reader = null;
StreamWriter writer = null;
try
{
Encoding encoding = Encoding.GetEncoding(Charset);
reader = new StreamReader(InputFileName, encoding);
writer = new StreamWriter(OutputFileName, false, encoding);
string line;
while ((line = reader.ReadLine()) != null)
{
line = RemoveAllTags(line);
line = RemoveDoubleNewLines(line);
line = TrimNewLines(line);
if (!string.IsNullOrEmpty(line))
{
Console.WriteLine(line);
writer.WriteLine(line);
}
}
}
catch (IOException)
{
Console.WriteLine("Can not read file " + InputFileName + ".");
}
finally
{
if (reader != null) { reader.Close(); }
}
writer.Close();
Console.ReadKey();
}
private static string RemoveAllTags(string str)
{
string strWithoutTags = Regex.Replace(str, "<[^>]*>", "\n");
return strWithoutTags;
}
/// Replaces sequence of new lines with only one new line
/// </summary>
private static string RemoveDoubleNewLines(string str)
{ string pattern = "[\n]+";
return Regex.Replace(str, pattern, "\n");
}
/// <summary>
/// Removes new lines from start and end of string
/// </summary>
private static string TrimNewLines(string str)
{
int start = 0;
while (start < str.Length && str[start] == '\n')
{
start++;
}
int end = str.Length - 1;
while (end >= 0 && str[end] == '\n')
{
end--;
}
if (start > end)
{
return string.Empty;
}
string trimmed = str.Substring(start, end - start + 1);
return trimmed;
}
}
}
https://docs.microsoft.com/ru-ru/dotnet/standard/base-types/regular-expression-language-quick-reference
http://qaru.site/questions/1077691/basic-regular-expression-for-a-generic-phone-number