149.94K
Category: programmingprogramming

Символы и строки. Лекция 18

1.

Лекция 18
Символы и строки

2.

Метод
Описание
GetNumericValue Возвращает числовое значение символа, если он является
цифрой, и –1 в противном случае
IsControl
IsDigit
IsLetter
IsLower
IsUpper
IsWhiteSpace
Возвращает true, если символ является управляющим
Parse
Преобразует строку в символ (строка должна состоять из
одного символа)
Преобразует символ в нижний регистр
ToLower
ToUpper
MaxValue,
MinValue
Возвращает true, если символ является десятичной цифрой
Возвращает true, если символ является буквой
Возвращает true, если символ задан в нижнем регистре
Возвращает true, если символ записан в верхнем регистре
Возвращает true, если символ является пробельным
(пробел, перевод строки и возврат каретки)
Преобразует символ в верхний регистр
Возвращают символы с максимальным и минимальным
кодами (эти символы не имеют видимого представления)

3.

Пример 1
static void Main(){
try {
char b = 'B', c = '\x63', d = '\u0032';
Console.WriteLine( "{0} {1} {2}", b, c, d );
Console.WriteLine( "{0} {1} {2}", char.ToLower(b),
char.ToUpper(c), char.GetNumericValue(d) );
char a;
do {
Console.Write( "Введите символ: " );
a = char.Parse( Console.ReadLine() );
Console.WriteLine("Введен символ {0},
его код – {1}", a, (int)a);

4.

Пример 1
if (char.IsLetter(a)) Console.WriteLine("Буква");
if (char.IsUpper(a)) Console.WriteLine("Верхний рег.");
if (char.IsLower(a)) Console.WriteLine("Нижний рег.");
if (char.IsControl(a)) Console.WriteLine("Управляющий");
if (char.IsNumber(a)) Console.WriteLine("Число");
if (char.IsPunctuation(a))
Console.WriteLine("Разделитель");
} while (a != 'q');
} catch{
Console.WriteLine( "Возникло исключение" );
return;
}
}

5.

Пример 2
class Class1{
static void Main() {
char[] a = { 'm', 'a', 's', 's', 'i', 'v' };
char[] b = "а роза упала на лапу азора".ToCharArray();
PrintArray("Исходный массив а:", a);
int pos = Array.IndexOf(a, 'm');
a[pos] = 'M';
PrintArray("Измененный массив а:", a);
PrintArray("Исходный массив b:", b);
Array.Reverse(b);
PrintArray("Измененный массив b:", b);
}
public static void PrintArray(string header, Array a) {
Console.WriteLine(header);
foreach (object x in a) Console.Write(x);
Console.WriteLine("\n");
}
}

6.

Пример 2
Результат работы программы:
Исходный массив а:
Massiv
Измененный массив а:
Massiv
Исходный массив b:
а роза упала на лапу азора
Измененный массив b:
ароза упал ан алапу азор а

7.

Пример 3
static void Main() {
char c;
char []s;
string s1;
int i = 0, j = 0, k = 0;
Console.Write(" Введите строку - ");
s1 = Console.ReadLine();
s = s1.ToArray();
Console.Write(" Введите символ для удаления - ");
c = Convert.ToChar(Console.ReadLine());

8.

Пример 3
while (i<s.Length) {
if (s[i] != c) s[j++] = s[i];
else k++;
i++;
}
for (int i = 0; i <k; i++) s[j + i] = '\0‘;
Console.Write(" Строка после удаления символа: ");
i = 0;
while (i < s.Length) {
Console.Write(s[i]);
i++;
}
Console.WriteLine();
}

9.

Строки типа String
Тип string, предназначенный для работы со строками
символов в кодировке Unicode, является встроенным
типом C#. Этот тип определяет и поддерживает
символьные строки. В С# строки являются объектами,
т. е. тип string относится к числу ссылочных.
При создании строкового литерала в
действительности формируется строковый объект.
Например, в следующей строке кода:
Console.WriteLine("В С# строки являются
объектами.");
текстовая строка "В С# строки являются объектами. "
автоматически (неявным образом) преобразуется в
строковый объект средствами С#.

10.

Строки типа String
Создать строку можно несколькими способами:
string s; // инициализация отложена
string t = "qqq"; // инициализация строковым литералом
string u = new string(' ', 20); // конструктор
// создает строку из 20 пробелов
Объект типа string можно также создать из
массива типа char. Например:
char[] a = { '0', '0', '0' }; // массив для
// инициализации строки
string v = new string( a ); // создание строки
// из массива символов

11.

Строки типа String
Для строк определены следующие операции:
присваивание ( = );
проверка на равенство ( == );
проверка на неравенство ( != );
обращение по индексу ( [] );
сцепление (конкатенация) строк ( + ).
Несмотря на то, что строки являются ссылочным
типом данных, на равенство и неравенство
проверяются не ссылки, а значения строк.
Строки равны, если имеют одинаковое
количество символов и совпадают
посимвольно.

12.

Строки типа String
Обращаться к отдельному элементу строки по индексу
можно только для получения значения, но не для его
изменения. Это связано с тем, что строки типа string
относятся к так называемым неизменяемым типам
данных. Методы, изменяющие содержимое строки,
на самом деле создают новую копию строки.
Неиспользуемые "старые" копии автоматически
удаляются сборщиком мусора.
Как только объект типа string будет создан, его можно
использовать везде, где только требуется строка
текста, заключенного в кавычки, например, объект
типа string может служить в качестве аргумента при
вызове метода WriteLine().

13.

Пример 4
using System;
class StringDemo {
static void Main() {
char[] charray = {'Э', 'т', 'о', ' ', ', ', 'с', 'т', 'р',
'о', 'к', 'а', '.‘};
string str1 = new string(charray);
string str2 = "Еще одна строка.";
Console.WriteLine(str1);
Console.WriteLine(str2);
}
}

14.

Элементы класса String
static int Compare(string strA, string strB,
StringComparison comparisonType) Возвращает отрицательное значение, если
строка strA меньше строки strB;
положительное значение, если строка strA
больше строки strB; и нуль, если
сравниваемые строки равны. Способ
сравнения определяется аргументом
comparisonType: с учетом и без учета регистра
и особенностей национального представления
дат и т. д.

15.

Элементы класса String
CompareOrdinal - Cравнивает две строки без
учета текущей культуры
Contains - Определяет, содержится ли подстрока
в строке
bool Equals(string value, StringComparison
comparisonType) - Возвращает логическое
значение true, если вызывающая строка имеет
такое же значение, как и у аргумента value.
Способ сравнения определяется аргументом
comparisonType
StartsWith и EndsWith - Определяют, совпадает
ли начало или конец строки с подстрокой

16.

Элементы класса String
Concat - Конкатенация строк. Метод допускает
сцепление произвольного числа строк
Copy - Создание копии строки
CopyTo - Копирует часть строки или всю строку
в другую строку
Format - Форматирование в соответствии с
заданными спецификаторами формата
int IndexOf(char value) - Осуществляет поиск в
вызывающей строке первого вхождения
символа, определяемого аргументом value.
Применяется порядковый способ поиска.

17.

Элементы класса String
int IndexOf(string value, StringComparison
comparisonType) - Возвращает индекс первого
совпадения с искомым символом или -1, если
он не обнаружен .Осуществляет поиск в
вызывающей строке первого вхождения
подстроки, определяемой аргументом value.
Возвращает индекс первого совпадения с
искомой подстрокой или -1, если она не
обнаружена. Способ поиска определяется
аргументом comparisonType
IndexOfAny

18.

Элементы класса String
int LastIndexOf (char value) Осуществляет поиск в вызывающей
строке последнего вхождения символа,
определяемого аргументом value.
Применяется порядковый способ поиска.
Возвращает индекс последнего
совпадения с искомым символом или -1,
если он не обнаружен
LastIndexOfAny

19.

Элементы класса String
int LastIndexOf (string value,
StringComparison comparisonType) Осуществляет поиск в вызывающей
строке последнего вхождения подстроки,
определяемой аргументом value.
Возвращает индекс последнего
совпадения с искомой подстрокой или -1,
если она не обнаружена. Способ поиска
определяется аргументом comparisonType

20.

Элементы класса String
Insert - Вставка подстроки в заданную
позицию
Replace - Замещает в строке символ или
подстроку другим символом или
подстрокой
Remove - Первая версия метода Remove
принимает индекс в строке, начиная с
которого надо удалить все символы.
Вторая версия принимает еще один
параметр - сколько символов надо
удалить

21.

Элементы класса String
Join - Слияние массива строк в единую
строку. Между элементами массива
вставляются разделители
Length - Длина строки (количество
символов)
Split - Разделение строки на элементы,
используя заданные разделители.
Результаты помещаются в массив строк
Trim - Удаляет начальные и конечные
пробелы из строки

22.

Элементы класса String
Substring - Выделение подстроки, начиная с
заданной позиции
ToCharArray - Преобразование строки в
массив символов
string ToLower (CultureInfо.CurrentCulture
culture) - Возвращает вариант вызывающей
строки в нижнем регистре. Способ
преобразования определяется аргументом
culture
string ToUpper (CultureInfо.CurrentCulture
culture) - Возвращает вариант вызывающей
строки в верхнем регистре. Способ
преобразования определяется аргументом
culture

23.

Элементы класса String
Cодержимое объекта типа string не подлежит
изменению. Это означает, что однажды созданную
последовательность символов изменить нельзя. Если
требуется строка в качестве разновидности уже
имеющейся строки, то для этой цели следует создать
новую строку, содержащую все необходимые
изменения.
Однако, переменные ссылки на строки (т.е. объекты
типа string) подлежат изменению, а следовательно,
они могут ссылаться на другой объект.
Но содержимое самого объекта типа string не меняется
после его создания.

24.

Пример 5
class Class1{
static void Main() {
string s = "прекрасная королева Изольда";
Console.WriteLine(s);
// удаляет 2 символа, начиная с 12-ого
string sub=s.Substring(3).Remove(12, 2);//1
Console.WriteLine(sub);
string[] mas = s.Split(' ');
// 2
string joined = string.Join("!", mas);
// 3
Console.WriteLine(joined);

25.

Пример 5
Console.WriteLine("Введите строку");
string x = Console.ReadLine();
Console.WriteLine("Вы ввели строку " + x);
double a = 12.234;
int b = 29;
Console.WriteLine("a={0,6:C} b={1,2:X}", a,
b); // 4
Console.WriteLine("a={0,6:0.##} a = {1,5:0.#
'руб.'}", a, b );
// 5
}

26.

Пример 5
Результат работы программы:
прекрасная королева Изольда
красная корова Изольда
прекрасная! королева! Изольда
Введите строкуне хочу!
Вы ввели строку не хочу!
a = 12,23p. b = 1D
a = 12,23 a=29 pуб.

27.

Элементы класса String
Например, подсчитать количество слов в сроке,
разделив ее по пробельным символам, можно так:
string text = "И поэтому все так произошло";
string[] words = text.Split(new char[] { ' ' },
StringSplitOptions.RemoveEmptyEntries);
foreach (string s in words){
Console.WriteLine(s);
}
Метод Format реализует форматирование строк.
После номера параметра можно задать минимальную
ширину поля вывода, а также указать спецификатор
формата, который определяет форму представления
выводимого значения:
{n [,m[:спецификатор_формата]]}

28.

Элементы класса String
string output = String.Format("Имя: {0} Возраст: {1}",
person.Name, person.Age);
Console.WriteLine(output);
double number = 23.7;
string result = String.Format("{0:C}", number);
Console.WriteLine(result);
// $ 23.7
string result2 = String.Format("{0:C2}", number);
Console.WriteLine(result2);
// $ 23.70
int number = 23;
string result = String.Format("{0:d}", number);
Console.WriteLine(result);
// 23
string result2 = String.Format("{0:d4}", number);
Console.WriteLine(result2); // 0023

29.

Элементы класса String
int number = 23;
string result = String.Format("{0:f}", number);
Console.WriteLine(result);
// 23,00
double number2 = 45.08;
string result2 = String.Format("{0:f4}", number2);
Console.WriteLine(result2); // 45,0800
double number3 = 25.07;
string result3 = String.Format("{0:f1}", number3);
Console.WriteLine(result2); // 25,1
decimal number = 0.15345m;
Console.WriteLine("{0:P1}", number);
// 15.3%

30.

Элементы класса String
вывести некоторое число в формате телефона +х
(ххх)ххх-хх-хх:
long number = 19876543210;
string result = String.Format("{0:+# (###) ###-##-##}",
number);
Console.WriteLine(result);
// +1 (987) 654-32-10
Метод ToString() может осуществлять
форматирование.
long number = 19876543210;
Console.WriteLine(number.ToString("+# (###) ###-####"));
// +1 (987) 654-32-10
double money = 24.8;
Console.WriteLine(money.ToString("C2")); // $ 24,80

31.

Элементы класса String
Начиная с версии Visual Studio 2015 была добавлена
такая функциональность, как интерполяция строк.
int x = 8;
int y = 7;
string result = $"{x} + {y} = {x + y}";
Console.WriteLine(result); // 8 + 7 = 15
Уже внутри строки можно применять форматирование.
В этом случае можно применять все те же описатели,
что и в методе Format. Например, вывод номера
телефона в формате +x xxx-xxx-xx-xx:
long number = 19876543210;
Console.WriteLine($"{number:+# ### ### ## ##}");
// +1 987 654 32 10

32.

Элементы класса String
Отдельный символ выбирается из строки с помощью
индекса:
string str = "тест";
Console.WriteLine(str[0]);
Для проверки двух строк на равенство служит оператор ==.
Когда оператор == применяется к ссылкам на две строки, он
сравнивает содержимое этих строк. Это же относится и к
оператору !=. В обоих случаях выполняется порядковое
сравнение.
Для проверки двух строк на равенство с учетом
культурной среды служит метод Equals(), где непременно
нужно указать способ сравнения в виде аргумента
StringComparison.CurrentCulture. Метод Compare()
служит для сравнения строк с целью определить отношение
порядка, например для сортировки.

33.

Пример 6
static void Main() {
string str1 = "Программировать в .NET лучше
всего на С#.";
string str2 = "Программировать в .NET лучше
всего на С#.";
string str3 = "Строки в С# весьма
эффективны.";
string strUp, strLow;
int result, idx;
Console.WriteLine("str1: " + str1);
Console.WriteLine("Длина строки str1: " +
strl.Length);

34.

Пример 6
// Создать варианты строки strl, набранные
прописными и строчными буквами.
strLow = str1.ToLower(CultureInfo.
CurrentCulture);
strUp = str1.ToUpper (CultureInfo.
CurrentCulture);
Console.WriteLine("Вариант строки str1, " +
"набранный строчными буквами:\n " + strLow);
Console.WriteLine("Вариант строки str1, " +
"набранный прописными буквами:\n " + strUp);
Console.WriteLine();

35.

Пример 6
// Вывести строку str1 посимвольно
Console.WriteLine("Вывод строки str1
посимвольно.");
for (int i=0; i < str1.Length; i++)
Console.Write(str1[i]);
Console.WriteLine("\n");
// Сравнить строки способом порядкового сравнения
if (str1==str2) Console.WriteLine("str1==str2");
else Console.WriteLine("str1 != str2");
if (str1==str3) Console.WriteLine("str1==str3");
else Console.WriteLine("str1 != str3");

36.

Пример 6
// Сравнить строки с учетом культурной среды
result = string.Compare(str3, str1,
StringComparison.CurrentCulture);
Метод Compare () объявляется как static, и поэтому он
вызывается по имени, а не по экземпляру своего класса.
if (result == 0) Console.WriteLine("Строки
str1 и str3 равны");
else if (result < 0) Console.WriteLine("Строка
str1 меньше строки str3");
else Console.WriteLine("Строка str1
больше строки str3");
Console.WriteLine();

37.

Пример 6
str2 = "Один Два Три Один";
// Поиск подстроки
idx = str2.IndexOf("Один",
StringComparison.Ordinal);
Console.WriteLine("Индекс первого
вхождения подстроки <Один>: " + idx);
idx = str2.LastlndexOf("Один",
StringComparison.Ordinal);
Console.WriteLine("Индекс последнего
вхождения подстроки <Один>: " + idx);
}
}

38.

Элементы класса String
С помощью метода IndexOf можно определить индекс
первого вхождения отдельного символа или подстроки
в строке:
string s1 = "hello world";
char ch = 'o';
int indexOfChar = s1.IndexOf(ch); // равно 4
Console.WriteLine(indexOfChar);
string subString = "wor";
int indexOfSubstring = s1.IndexOf(subString); // равно 6
Console.WriteLine(indexOfSubstring);
Подобным образом действует метод LastIndexOf,
только находит индекс последнего вхождения символа
или подстроки в строку.

39.

Элементы класса String
Методы StartsWith и EndsWith позволяют узнать
начинается или заканчивается строка на
определенную подстроку. Например:
string path = "C:\SomeDir";
if (path.EndsWith("Dir")) ...;
С помощью оператора + можно сцепить (т.е.
объединить вместе) две строки.
Например, в следующем фрагменте кода:
string str1 = "Один";
string str2 = "Два";
string str3 = "Три";
string str4 = str1 + str2 + str3;
переменная str4 инициализируется строкой
"ОдинДваТри".

40.

Элементы класса String
Для обрезки начальных или концевых символов
используется функция Trim:
string text = " hello world ";
text = text.Trim(); // "hello world"
text = text.Trim(new char[] { 'd', 'h' }); // "ello worl"
Функция Trim без параметров обрезает начальные и
конечные пробелы и возвращает обрезанную строку.
Чтобы явным образом указать, какие начальные и
конечные символы следует обрезать, можно передать в
функцию массив этих символов.
Эта функция имеет частичные аналоги:
функция TrimStart обрезает начальные символы, а
функция TrimEnd обрезает конечные символы.

41.

Элементы класса String
Обрезать определенную часть строки позволяет
функция Substring:
string text = "Хороший день";
// обрезаем начиная с третьего символа
text = text.Substring(2);
Console.WriteLine(text); // "роший день"
// обрезать сначала до последних двух символов
text = text.Substring(0, text.Length - 2);
Console.WriteLine(text); // "роший де"
Функция Substring возвращает обрезанную строку. В
качестве параметра первая использованная версия
применяет индекс, начиная с которого надо обрезать строку.
Вторая версия применяет два параметра - индекс начала
обрезки и длину вырезаемой части строки.

42.

Элементы класса String
Для вставки одной строки в другую
применяется функция Insert:
string text = "Хороший день";
string subString = "замечательный ";
text = text.Insert(8, subString);
Console.WriteLine(text);
Первым параметром в функции Insert
является индекс, по которому надо
вставлять подстроку, а второй параметр собственно подстрока.

43.

Элементы класса String
Чтобы заменить один символ или подстроку
на другую, применяется метод Replace:
string text = "хороший день";
text = text.Replace("хороший", "плохой");
Console.WriteLine(text);
text = text.Replace("о", "");
Console.WriteLine(text);
Во втором случае применения функции Replace
строка из одного символа "о" заменяется на
пустую строку, то есть фактически удаляется из
текста. Подобным способом легко удалять
какой-то определенный текст в строках.

44.

Пример 7
static void Main() {
string[] str = {"Это", "очень", "простой", "тест."};
Console.WriteLine("Исходный массив: ");
for (int i=0; i < str.Length; i++)
Console.Write(str[i] + " ");
str[l] = "тоже";
str[3] = "до предела тест !.";
Console.WriteLine("Видоизмененный массив:");
for (int i=0; i < str.Length; i++)
Console.Write(str[i] + " ");
}

45.

Пример 8
static void Main() {
int num = 1908;
int nextdigit = 0;
int numdigits = 0;
int[] n = new int[20];
string[] digits = { "нуль", "один", "два",
"три", "четыре", "пять", "шесть", "семь",
"восемь", "девять" };
Console.WriteLine("Число: " + num);
Console.Write("Число словами: ");

46.

Пример 8
// Получить отдельные цифры и сохранить их в массиве n
// Эти цифры сохраняются в обратном порядке
do {
nextdigit = num % 10;
n[numdigits] = nextdigit;
numdigits++;
num = num / 10;
} while(num > 0);
numdigits--;
for ( ; numdigits >= 0; numdigits--)
Console.Write(digits[n[numdigits]] + " ");
Console.WriteLine();
}

47.

Пример 9
static void Main() {
string[] strs={"один", "два", "три", "два", "один"};
foreach (string s in strs) {
switch(s) {
case "один": Console.Write ("1"); break;
case "два": Console.Write ("2"); break;
case "три": Console.Write ("3"); break;
}
}
Console.WriteLine ();
}

48.

Строки типа StringBuilder
Класс StringBuilder позволяет создавать динамические
строки, которые можно изменять.
Класс StringBuilder класс представляет.
При создании строки StringBuilder выделяет памяти
больше, чем необходимо этой строке:
StringBuilder sb = new StringBuilder("Привет
мир");
Console.WriteLine("Длина строки: {0}",
sb.Length); // 10
Console.WriteLine("Емкость строки: {0}",
sb.Capacity); // 16
StringBuilder sb = new StringBuilder(20);

49.

Пример 10
StringBuilder sb = new StringBuilder("Название:");
Console.WriteLine("Длина sb:{0}", sb.Length); // 10
Console.WriteLine("Емкость sb: {0}", sb.Capacity); //16
// метод Append добавляет к строке подстроку
sb.Append(" Руководство");
Console.WriteLine("Длина sb: {0}", sb.Length); // 22
Console.WriteLine("Емкость sb: {0}", sb.Capacity); //32
sb.Append(" по C#");
Console.WriteLine("Длина sb: {0}", sb.Length); // 28
Console.WriteLine("Емкость sb: {0}", sb.Capacity); //32

50.

Строки типа StringBuilder
Кроме метода Append класс StringBuilder
предлагает еще ряд методов для операций над
строками:
Insert: вставляет подстроку в объект
StringBuilder, начиная с определенного индекса
Remove: удаляет определенное количество
символов, начиная с определенного индекса
Replace: заменяет все вхождения определенного
символа или подстроки на другой символ или
подстроку
AppendFormat: доабвляет подстроку в конец
объекта StringBuilder

51.

Пример 11
StringBuilder sb = new StringBuilder("Привет мир");
sb.Append("!");
sb.Insert(7, "компьютерный ");
Console.WriteLine(sb);
sb.Replace("мир", "world"); // замена слова
Console.WriteLine(sb);
sb.Remove(7, 5); // удаление 13-ти символов, начиная с 7-го
Console.WriteLine(sb);
// получение строки из объекта StringBuilder
string s = sb.ToString();
Console.WriteLine(s);

52.

String или StringBulder?
Microsoft рекомендует использовать класс String:
- При небольшом количестве операций и изменений над
строками
- При выполнении фиксированного количества операций
объединения. В этом случае компилятор может
объединить все операции объединения в одну
- Когда надо выполнять масштабные операции поиска
при построении строки, например IndexOf или
StartsWith. Класс StringBuilder не имеет подобных
методов.
Класс StringBuilder рекомендуется использовать:
- При неизвестном количестве операций и изменений над
строками во время выполнения программы
- Когда предполагается, что приложению придется
сделать множество подобных операций

53.

Регулярные выражения
Регулярные выражения представляют
эффективный и гибкий метод по обработке
больших текстов, позволяя в то же время
существенно уменьшить объемы кода по
сравнению с использованием стандартных
операций со строками.
Основная функциональность регулярных
выражений в .NET сосредоточена в
пространстве имен
System.Text.RegularExpressions. А
центральным классом при работе с регулярными
выражениями является класс Regex.

54.

Регулярные выражения
Например, есть некоторый текст и надо найти в нем все
словоформы какого-нибудь слова.
string ss = "Бык тупогуб, тупогубенький бычок, у быка
губа бела была тупа";
Console.WriteLine("строка: " + ss);
System.Text.RegularExpressions.Regex regex = new
System.Text.RegularExpressions.Regex(@"туп(\w*)");
System.Text.RegularExpressions.MatchCollection matches
= regex.Matches(ss);
if (matches.Count > 0){
foreach (System.Text.RegularExpressions.Match
match in matches) Console.WriteLine(match.Value);
} else{ Console.WriteLine("Совпадений не найдено");
}

55.

Регулярные выражения
Класс Regex имеет ряд конструкторов, позволяющих
выполнить начальную инициализацию объекта. Две
версии конструкторов в качестве одного из параметров
принимают перечисление RegexOptions. Некоторые из
значений, принимаемых данным перечислением:
Compiled: при установке этого значения регулярное
выражение компилируется в сборку, что обеспечивает
более быстрое выполнение
CultureInvariant: при установке этого значения будут
игнорироваться региональные различия
IgnoreCase: при установке этого значения будет
игнорироваться регистр
IgnorePatternWhitespace: удаляет из строки пробелы и
разрешает комментарии, начинающиеся со знака #

56.

Регулярные выражения
Multiline: указывает, что текст надо рассматривать в
многострочном режиме. При таком режиме символы "^"
и "$" совпадают, соответственно, с началом и концом
любой строки, а не с началом и концом всего текста
RightToLeft: приписывает читать строку справа налево
Singleline: устанавливает однострочный режим, а весь
текст рассматривается как одна строка
Например:
Regex regex = new Regex(@"туп(\w*)",
RegexOptions.IgnoreCase);
При необходимости можно установить несколько
параметров:
Regex regex = new Regex(@"туп(\w*)",
RegexOptions.Compiled | RegexOptions.IgnoreCase);

57.

Синтаксис регулярных выражений
^: соответствие должно начинаться в начале строки
(например, выражение @"^пр\w*" соответствует
строке "привет мир")
$: конец строки (например,
выражение @"\w*ир$" соответствует строке
"привет мир", так как часть "ир" находится в самом
конце)
.: знак точки определяет любой одиночный символ
(например, выражение "м.р" соответствует слову
"мир" или "мор")
*: предыдущий символ повторяется 0 и более раз
+: предыдущий символ повторяется 1 и более раз

58.

Синтаксис регулярных выражений
?: предыдущий символ повторяется 0 или 1 раз
\s: соответствует любому пробельному символу
\S: соответствует любому символу, не являющемуся
пробелом
\w: соответствует любому алфавитно-цифровому
символу
\W: соответствует любому не алфавитноцифровому символу
\d: соответствует любой десятичной цифре
\D : соответствует любому символу, не
являющемуся десятичной цифрой

59.

Примеры регулярных выражений
Найти в скороговорке "Бык тупогуб,
тупогубенький бычок, у быка губа бела была
тупа" все слова, где встречается корень "губ":
string s = "Бык тупогуб, тупогубенький
бычок, у быка губа бела была тупа";
Regex regex = new Regex(@"\w*губ\w*");
Найти телефонный номер в формате 111-111-1111:
string s = "456-435-2318";
Regex regex = new Regex(@"\d{3}-\d{3}-\d{4}");

60.

Примеры регулярных выражений
Можно не только задать поиск по определенным
типам символов - пробелы, цифры, но и задать
конкретные символы, которые должны входить в
регулярное выражение:
string s = "456-435-2318";
Regex regex = new Regex("[0-9]{3}-[0-9]{3}-[09]{4}");
Regex regex = new Regex("[a-v]{5}"); - данное
выражение будет соответствовать любому
сочетанию пяти символов, в котором все
символы находятся в диапазоне от a до v

61.

Примеры регулярных выражений
Можно также указать отдельные значения:
Regex regex = new Regex(@"[2]*-[0-9]{3}\d{4}"); - это выражение будет соответствовать,
например, такому номеру телефона "222-222-2222" (так
как первые числа двойки)
С помощью операции | можно задать альтернативные
символы:
Regex regex = new Regex(@"[2|3]{3}-[0-9]{3}\d{4}");
То есть первые три цифры могут содержать только
двойки или тройки, например, "222-222-2222" и "323435-2318". Строка "235-435-2318" уже не подпадает под
шаблон, так как одной из трех первых цифр является
цифра 5.

62.

Примеры регулярных выражений
Такие символы, как *, + и ряд других используются в
качестве специальных символов. И возникает вопрос, а
что делать, если надо найти строки, где содержится
точка, звездочка или какой-то другой специальный
символ? В этом случае надо просто экранировать эти
символы слешем:
Regex regex = new Regex(@"[2|3]{3}\.[0-9]{3}\.\d{4}");
- этому выражению будет соответствовать строка
"222.222.2222"
Класс Regex предоставляет статический метод IsMatch,
который позволяет проверить входную строку с
шаблоном на соответствие.

63.

Пример 12
string pattern = @"^(?("")(""[^""]+?""@)|(([0-9az]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[09a-z])@))"
+ @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$";
while (true){
Console.WriteLine("Введите адрес
электронной почты");
string email = Console.ReadLine();

64.

Пример 12
if (System.Text.RegularExpressions.Regex.IsMatch
(email, pattern, System.Text.RegularExpressions.
RegexOptions.IgnoreCase))
{
Console.WriteLine("Email подтвержден");
break;
} else
{
Console.WriteLine("Некорректный email");
}
}

65.

Примеры регулярных выражений
Класс Regex имеет метод Replace,
который позволяет заменить строку,
соответствующую регулярному
выражению, другой строкой:
string s = "Мама мыла раму. ";
string pattern = @"\s+";
string target = " ";
Regex regex = new Regex(pattern);
string result = regex.Replace(s, target);
Метод Replace проходит по всему тексту и заменяет
несколько подряд идущих пробелов ординарными

66.

Контрольные вопросы
1 Что такое кодировка Unicode?
2 Какие средства работы с отдельными
символами предоставляет C#?
3 Опишите основные методы и свойства класса
string.
4 Можно ли изменить длину строки после того,
как память под нее была выделена?
5 Какое основное ограничение имеет класс
string?
6 Какие существуют возможности
форматирования строк?
7 Перечислите спецификации формата.

67.

Контрольные вопросы
8 Опишите пользовательский формат
вещественного числа с двумя ведущими нулями
и тремя знаками после запятой.
9 Назовите основные свойства и методы
стандартного класса System.String.
10 Назовите основные свойства и методы
стандартного класса System.Char.
11 Назовите основные свойства и методы
стандартного класса System.Text.StringBuilder.
12 Каковы особенности регулярных
выражений?

68.

Домашнее задание
Напишите программу, которая
меняет порядок следования
символов строки, введенной
пользователем, на обратный.
English     Русский Rules