219.27K
Категория: ПрограммированиеПрограммирование

Методы программирования

1.

Методы
программирования

2.

Содержание курса
• Регулярные выражения в .NET
• Нововведения языка программирования C#
• Язык LINQ
• Язык программирования Python

3.

Список литературы
• Троелсен, Э. С# и платформа .NET = C# and the .Net Platform
• Котов, О.М. Язык C#: краткое описание и введение в технологии
программирования
• Соловьев, Н.А. Системы автоматизации разработки программного
обеспечения
• Биллиг, В. А. Основы программирования на С#
• Хорев П. Б. Объектно-ориентированное программирование с
примерами на C#
• Гуриков С.Р. Основы алгоритмизации и программирования на Python

4.

Интернет-ресурсы
• Уроки по C# и платформе .NET Framework. – Режим доступа:
https://professorweb.ru/
• Language-Integrated Query (LINQ) (C#). – Режим доступа:
https://docs.microsoft.com/en-us/dotnet/csharp/programmingguide/concepts/linq/
• Полное руководство по языку программирования С# 9.0 и платформе .NET 5
https://metanit.com/sharp/tutorial/
• Руководство по языку программирования Python
https://metanit.com/python/tutorial/
• Самоучитель Python https://pythonworld.ru/samouchitel-python
• Бесплатный курс по программированию на Python http://pythontutor.ru/
• Онлайн-курсы Stepik https://stepik.org/

5.

Регулярные выражения в .NET

6.

Понятие регулярного выражения
Регулярное выражение (regular expression, regexp) - стандарт для поиска
и замены текста в строках.
Существует два стандарта:
• основные регулярные выражения (BRE - basic regular expressions)
• расширенные регулярные выражения (ERE - extended regular
expressions).

7.

Язык регулярных выражений
Включает в себя:
• Набор управляющих кодов для идентификации специфических типов
символов
• Система для группирования частей подстрок и промежуточных
результатов таких действий

8.

Задачи, решаемые с
помощью регулярных выражений.
• Идентифицировать (и возможно, помечать к удалению) все
повторяющиеся слова в строке
• Сделать заглавными первые буквы всех слов
• Преобразовать первые буквы всех слов длиннее трех символов в
заглавные
• Обеспечить правильный ввод данных
• Выделить различные элементы в URL (например, выделить протокол,
имя компьютера, имя файла и т.д.)

9.

Метасимволы регулярных выражений.
Метасимволов — специальные символы, задающие команды, а также
управляющие последовательности, которые работают подобно
управляющим последовательностям C#. Это символы, предваренные
знаком обратного слеша (\) и имеющие специальное назначение.

10.

Классы символов
Любой из символов,
указанных в скобках
Любой из символов, не
[^...]
указанных в скобках
Любой символ, кроме
.
перевода строки или другого
разделителя Unicode-строки
Любой текстовый символ, не
\w являющийся пробелом,
символом табуляции и т.п.
Любой символ, не
\W являющийся текстовым
символом
[...]
\s
\S
\d
\D
Любой пробельный символ из
набора Unicode
Любой непробельный символ из
набора Unicode. Обратите
внимание, что символы \w и \S это не одно и то же
Любые ASCII-цифры.
Эквивалентно [0-9]
Любой символ, отличный от ASCIIцифр. Эквивалентно [^0-9]

11.

Символы повторения
{n,m}
Соответствует предшествующему шаблону, повторенному не менее n и не более
m раз
{n,}
Соответствует предшествующему шаблону, повторенному n или более раз
{n}
Соответствует в точности n экземплярам предшествующего шаблона
?
Соответствует нулю или одному экземпляру предшествующего шаблона;
предшествующий шаблон является необязательным
+
Соответствует одному или более экземплярам предшествующего шаблона
*
Соответствует нулю или более экземплярам предшествующего шаблона

12.

Символы регулярных выражений выбора
|
Соответствует либо подвыражению слева, либо подвыражению справа
(аналог логической операции ИЛИ).
(...)
Группировка. Группирует элементы в единое целое, которое может
использоваться с символами *, +, ?, | и т.п. Также запоминает символы,
соответствующие этой группе для использования в последующих ссылках.
(?:...)
Только группировка. Группирует элементы в единое целое, но не
запоминает символы, соответствующие этой группе.

13.

Якорные символы регулярных выражений
^
Соответствует началу строкового выражения или началу
строки при многострочном поиске.
$
Соответствует концу строкового выражения или концу
строки при многострочном поиске.
\b
Соответствует границе слова, т.е. соответствует позиции
между символом \w и символом \W или между символом
\w и началом или концом строки.
\B
Соответствует позиции, не являющейся границей слов.

14.

Использование регулярных выражений
Пространство имен:
Using System.Text.RegularExpressions;
Основные классы:
• Regex - постоянное регулярное выражение.
• Match - предоставляет результаты очередного применения всего регулярного
выражения к исходной строке.
• MatchCollection - предоставляет набор успешных сопоставлений, при итеративном
применении образца регулярного выражения к строке.
• Capture - предоставляет результаты отдельного захвата подвыражения.
• Group - предоставляет результаты для одной регулярной группы.
• GroupCollection - предоставляет коллекцию найденных групп и возвращает набор
групп как одно соответствие.
• CaptureCollection - предоставляет последовательность найденных подстрок и
возвращает наборы соответствий отдельно для каждой группы.

15.

Класс Regex
• Конструкторы
• Public Regex (string pattern) - создание регулярного выражения по
шаблону:
string pattern = @"\b[at]\w+";
Regex defaultRegex = new Regex(pattern);

16.

Класс Regex
• Конструкторы
• public Regex(string pattern,
System.Text.RegularExpressions.RegexOptions options) - создание
регулярного выражение по шаблону с параметром:
string pattern = @"\b[at]\w+";
RegexOptions options = RegexOptions.IgnoreCase |
RegexOptions.Compiled;
Regex optionRegex = new Regex(pattern, options);

17.

Примеры параметров
Указывает, что регулярное выражение скомпилировано в сборку. Это дает более
быстрое исполнение, но увеличивает время запуска.
CultureInvariant
Указывает игнорирование региональных языковых различий.
IgnoreCase
Указывает соответствие, не учитывающее регистр.
Устраняет из шаблона разделительные символы без escape-последовательности и
IgnorePatternWhitespace
включает комментарии, помеченные символом "#".
Многострочный режим. Изменяет значение символов "^" и "$" так, что они
Multiline
совпадают, соответственно, в начале и конце любой строки, а не только в начале и
конце целой строки..
None
Указывает на отсутствие заданных параметров.
Указывает, что поиск будет выполнен в направлении справа налево, а не слева
RightToLeft
направо.
Указывает однострочный режим. Изменяет значение точки (.) так, что она
Singleline
соответствует любому символу (вместо любого символа, кроме "\n").
Compiled

18.

Методы класса Regex
• IsMatch - Указывает, обнаружено ли в указанной входной строке
соответствие регулярному выражению, заданному в конструкторе Regex.
public bool IsMatch(string input);

19.

Методы класса Regex (пример)
{
string[] partNumbers = { "1298-673-4192", "A08Z-931-468A",
"_A90-123-129X", "12345-KKA-1230",
"0919-2893-1256" };
Regex rgx = new Regex(@"^[a-zA-Z0-9]\d{2}[a-zA-Z0-9](-\d{3}){2}[A-Za-z0-9]$");
foreach(string partNumber in partNumbers)
Console.WriteLine("{0} {1} a valid part number.",
partNumber,
rgx.IsMatch(partNumber) ? "is" : "is not");
}

20.

Методы класса Regex
• Split - Разделяет входную строку в массив подстрок в позициях,
определенных шаблоном регулярного выражения, указанным в
конструкторе Regex.
public string [] Split (string input);

21.

Метод Split (пример)
{
Regex regex = new Regex("-");
// Split on hyphens.
string[] substrings = regex.Split("plum--pear");
foreach(string match in substrings)
{
Console.WriteLine("'{0}'", match);
}
}
// Regex(“(-)")??
// “—plum—pear”??
Regex(“”)??

22.

Метод Split (пример)
{
string pattern = @"\d+";
Regex rgx = new Regex(pattern);
string input = "123ABCDE456FGHIJKL789MNOPQ012";
string[] result = rgx.Split(input);
for (int ctr = 0; ctr < result.Length; ctr++) {
Console.Write("'{0}'", result[ctr]);
if (ctr < result.Length - 1)
Console.Write(", ");
}
Console.WriteLine();
}

23.

Метод Replace
• Replace - В указанной входной строке заменяет все строки,
соответствующие указанному регулярному выражению, указанной
строкой замены.
public static string Replace(string input, string pattern,
string replacement);

24.

Метод Replace (пример)
{
string input = "This is
text with
far
too
much
" +
"white space.";
string pattern = "\\s+";
string replacement = " ";
string result = Regex.Replace(input, pattern, replacement);
Console.WriteLine("Original String: {0}", input);
Console.WriteLine("Replacement String: {0}", result);
}

25.

Метод Match
public System.Text.RegularExpressions.Match Match(string
input);
public static System.Text.RegularExpressions.Match
Match(string input, string pattern);

26.

Метод Match (пример)
string input = "ablaze beagle choral dozen elementary fanatic " +
"glaze hunger inept jazz kitchen lemon minus " +
"night optical pizza quiz restoration stamina " +
"train unrest vertical whiz xray yellow zealous";
string pattern = @"\b\w*z+\w*\b";
Match m = Regex.Match(input, pattern);
while (m.Success)
{
Console.WriteLine("'{0}' found at position {1}", m.Value, m.Index);
m = m.NextMatch();
}

27.

Метод Matches
public System.Text.RegularExpressions.MatchCollection
Matches(string input);
public static System.Text.RegularExpressions.MatchCollection
Matches(string input, string pattern);

28.

Метод Matches (пример)
string pattern = @"\b\w+es\b";
Regex rgx = new Regex(pattern);
string sentence = "Who writes these notes?";
foreach (Match match in rgx.Matches(sentence))
Console.WriteLine("Found '{0}' at position {1}",
match.Value, match.Index);

29.

Метод Matches (пример)
string pattern = @"\b\w+es\b";
string sentence = "Who writes these notes?";
foreach (Match match in Regex.Matches(sentence, pattern))
Console.WriteLine("Found '{0}' at position {1}",
match.Value, match.Index);

30.

Жадность квантификаторов
• Жадная версия.
Жадный квантификатор пытается найти максимально возможное число
соответствий элемента.
• Нежадная (ленивая) версия.
При использовании нежадных идентификаторов предпринимается
попытка найти минимально возможное число соответствий элемента.
Чтобы превратить любой жадный квантификатор в ленивый, добавьте к
нему?.

31.

Ленивые квантификаторы
{n,m}?
Соответствует предшествующему шаблону, повторенному не менее n и не более
m раз
{n,}?
Соответствует предшествующему шаблону, повторенному n или более раз
{n}?
Соответствует в точности n экземплярам предшествующего шаблона
??
Соответствует нулю или одному экземпляру предшествующего шаблона;
предшествующий шаблон является необязательным
+?
Соответствует одному или более экземплярам предшествующего шаблона
*?
Соответствует нулю или более экземплярам предшествующего шаблона

32.

Конструкции группировки
( subexpression )
Захватывает соответствующую
часть выражения и назначает ей
(\w)\1
порядковый номер,
отсчитываемый от единицы.
"ee" в "deep"
(?< name > subexpression
Выделяет соответствующую
)
часть выражения в именованную (?<double>\w)\k<double>
"ee" в "deep"
or
группу.
(?' name ' subexpression )
(?< name1 - name2 >
subexpression )
(((?'Open'\()[^\(\)]*)+((?'CloseЗадает сбалансированное
"((1-3)*(3-1))" в "3+2^((1-3)*(3or
Open'\))[^\(\)]*)+)*(?(Open)(?!)
определение группы.
1))"
(?' name1 - name2 '
)$
subexpression )
"WriteLine" в
"Console.WriteLine()"
Определяет невыделяемую
(?: subexpression )
Write(?:Line)?
группу.
"Write" в
"Console.Write(value)"
Применяет или отключает
(?imnsx-imnsx:
"A12xl", "A12XL" в "A12xl
указанные параметры в части
A\d{2}(?i:\w+)\b
subexpression )
A12XL a12xl"
выражения.

33.

Конструкции группировки
Параметр
Описание
i
Сопоставление без учета регистра.
m
Многострочный режим.
n
Только явные захваты. (Скобки не действуют как захватываемые
группы.)
s
Однострочный режим.
x
Игнорировать не преобразованные в escape-последовательность
пробелы и разрешить комментарии в режиме x.
(?# comment line)
Встроенный комментарий
# comment end line Комментарий в конце выражения

34.

Конструкции группировки (пример)
string pattern = @"(\w+)\s(\1)";
string input = "He said that that was the the correct answer.";
foreach (Match match in Regex.Matches(input, pattern,
RegexOptions.IgnoreCase))
Console.WriteLine("Duplicate '{0}' found at positions {1} and {2}.",
match.Groups[1].Value, match.Groups[1].Index,
match.Groups[2].Index);

35.

Конструкции группировки (пример)
string pattern = @"(?<duplicateWord>\w+)\s\k<duplicateWord>\W(?<nextWord>\w+)";
string input = "He said that that was the the correct answer.";
foreach (Match match in Regex.Matches(input, pattern, RegexOptions.IgnoreCase))
Console.WriteLine("A duplicate '{0}' at position {1} is followed by '{2}'.",
match.Groups["duplicateWord"].Value,
match.Groups["duplicateWord"].Index,
match.Groups["nextWord"].Value);

36.

Конструкции группировки (пример)
string pattern = "^[^<>]*" +
"(" +
"((?'Open'<)[^<>]*)+" +
"((?'Close-Open'>)[^<>]*)+" +
")*" +
"(?(Open)(?!))$";

37.

Конструкции группировки (пример)
string pattern = @"(?:\b(?:\w+)\W*)+\.";
string input = "This is a short sentence.";
Match match = Regex.Match(input, pattern);
Console.WriteLine("Match: {0}", match.Value);
for (int ctr = 1; ctr < match.Groups.Count; ctr++)
Console.WriteLine("
Group {0}: {1}", ctr, match.Groups[ctr].Value);

38.

Конструкции группировки
Утверждение положительного
(?= subexpression ) просмотра вперед нулевой
ширины.
Утверждение отрицательного
(?! subexpression ) просмотра вперед нулевой
ширины.
Утверждение положительного
(?<= subexpression ) просмотра назад нулевой
ширины.
Утверждение отрицательного
(?<! subexpression ) просмотра назад нулевой
ширины.
(?> subexpression ) Атомарная группа.
\w+(?=\.)
"is", "ran" и "out" в "He is.
The dog ran. The sun is
out."
\b(?!un)\w+\b
"sure", "used" в "unsure
sure unity used"
(?<=19)\d{2}\b
"99", "50", "05" в "1851
1999 1950 1905 2003"
(?<!19)\d{2}\b
"51", "03" в "1851 1999
1950 1905 2003"
@"(\w)\1+.\b";
@"(?>(\w)\1+).\b";
"cccd.", "aaad", "aaaa"

39.

Конструкции группировки (пример)
string pattern = @"\b\w+(?=\sis\b)";
string[] inputs = { "The dog is a Malamute.",
"The island has beautiful
birds.",
"The pitch missed home plate.",
"Sunday is a weekend day." };

40.

Конструкции группировки (пример)
string pattern = @"\b(?!un)\w+\b";
string input = "unite one unethical ethics use untie
ultimate";
foreach (Match match in Regex.Matches(input, pattern,
RegexOptions.IgnoreCase))
Console.WriteLine(match.Value);

41.

Конструкции группировки (пример)
string pattern = @"\b\w+\b(?!\p{P})";
string input = "Disconnected, disjointed thoughts in a
sentence fragment.";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);

42.

Конструкции группировки (пример)
string input = "2010 1999 1861 2140 2009";
string pattern = @"(?<=\b20)\d{2}\b";
foreach (Match match in Regex.Matches(input, pattern))
Console.WriteLine(match.Value);

43.

Конструкции группировки (пример)
string[] dates = { "Monday February 1, 2010",
"Wednesday February 3, 2010",
"Saturday February 6, 2010",
"Sunday February 7, 2010",
"Monday, February 8, 2010" };
string pattern = @"(?<!(Saturday|Sunday) )\b\w+ \d{1,2}, \d{4}\b";
foreach (string dateValue in dates)
{
Match match = Regex.Match(dateValue, pattern);
if (match.Success)
Console.WriteLine(match.Value);
}

44.

Подстановки
Подстановка Описание
$ число
Включает в строку замены последнюю подстроку, соответствующую группе записи,
которая идентифицируется как number, где number — десятичное значение.
${ name }
Включает в строку замены последнюю подстроку, соответствующую именованной
группе, обозначаемой как (?<name> ) .
$$
Включает один литерал "$" в строку замены.
$&
Включает копию всего соответствия в строку замены.
$`
Включает весь текст входной строки до соответствия в строку замены.
$'
Включает весь текст входной строки после соответствия в строку замены.
$+
Включает последнюю записанную группу в строку замены.
$_
Включает всю входную строку в строку замены.

45.

Подстановки (пример)
string pattern = @"\p{Sc}*(\s?\d+[.,]?\d*)\p{Sc}*";
string replacement = "$1";
string input = "$16.32 12.19 £16.29 €18.29 €18,29";
string result = Regex.Replace(input, pattern,
replacement);

46.

Подстановки (пример)
string pattern = @"\p{Sc}*(?<amount>\s?\d+[.,]?\d*)\p{Sc}*";
string replacement = "${amount}";
string input = "$16.32 12.19 £16.29 €18.29 €18,29";
string result = Regex.Replace(input, pattern, replacement);
Console.WriteLine(result);

47.

Подстановки (пример)
string pattern = @"^(\w+\s?)+$";
string[] titles = { "A Tale of Two Cities",
"The Hound of the Baskervilles",
"The Protestant Ethic and the
Spirit of Capitalism",
"The Origin of Species" };
string replacement = "\"$&\"";
foreach (string title in titles)
Console.WriteLine(Regex.Replace(title, pattern,
replacement));

48.

Подстановки (пример)
string input = "aa1bb2cc3dd4ee5";
string pattern = @"\d+";
string substitution = "$`";
Console.WriteLine("Input string: {0}", input);
Console.WriteLine("Output string: " +
Regex.Replace(input, pattern,
substitution));

49.

Подстановки (пример)
string input = "aa1bb2cc3dd4ee5";
string pattern = @"\d+";
string substitution = "$'";
Console.WriteLine("Input string: {0}", input);
Console.WriteLine("Output string: " +
Regex.Replace(input, pattern,
substitution));

50.

Подстановки (пример)
string pattern = @"\b(\w+)\s\1\b";
string substitution = "$+";
string input = "The the dog jumped over the fence fence.";
Console.WriteLine(Regex.Replace(input, pattern, substitution,
RegexOptions.IgnoreCase));

51.

Подстановки (пример)
string input = "ABC123DEF456";
string pattern = @"\d+";
string substitution = "$_";
Console.WriteLine("Original string:
{0}", input);
Console.WriteLine("String with substitution: {0}",
Regex.Replace(input, pattern,
substitution));
English     Русский Правила