Theory
Lecture in pdf format
Char type
c: char; ... c:='a'; |
begin var c: char; c:='a'; Println(c.IsDigit); // False Println(c.IsLetter); // True Println(c.IsLower); // True Println(c.IsUpper); // False Println(c.IsPunctuation); // знак препинания, boolean с := char.ToLower(с) ; с := char.ToUpper(с); end. |
c1 < c2;// сравнение по коду c1 > c2; с in ['a','e','i','o','u',’y’]; // c принадлежит гласным с in ['a'..'z','A'..'Z’]; // c принадлежит английским буквам |
Запросите ввести два символа. Определите, принадлежат ли символы английским буквам, и если да, то гласные ли это буквы. Преобразуйте в верхний регистр ту букву, код которой меньше.
Пример вывода:
Введите два символа: u z u - английская буква, гласная z - английская буква, не гласная Буква u в верхнем регистре U
String type
s: string; ... s:='abc'; |
begin var s: string; s:='Abc'; Println(s.ToLower); // abc Println(s.ToUpper); // ABC end. |
Slices of the strings:
begin var s: string; s:='12345678'; Println(s[3:6]); // 345 Println(s[::-1]); // 87654321 end. |
String methods:
Сonversion string <-> number
:
begin var s: string; s:='12345678'; var i:=1; Println(i.ToString); // string '1' Println(s.ToInteger); // number 12345678 Println(s.ToReal); // number 12345678 end. |
or
begin var s: string; s:='12345678'; var i:=1; Println(integer.TryParse(s,i)); // is it possible to convert s to a number - True end. |
Сonversion of a string to an array of words:
begin var s:='it is a piece of cake'; var ss:=s.ToWords.Println('_'); // it_is_a_piece_of_cake ss.Sorted.Println // a cake of piece is it end. |
Sample: remove all «i» letters:
begin var s:='it is a piece of cake'; s:=s.Where(c -> c<>'i').JoinIntoString; print(s); // t s a pece of cake end. |
While working with strings we can use any sequence method
Reguglar expressions
Язык регулярных выражений — это язык шаблонов, расширенные операции поиска и замены для строк.
Основной цикл:
s := 'red green gray blue'; foreach var m in s.Matches('\w+') do Print(m.Value, m.Index); |
Т.е. m: Match
включает m.Value
, m.Index
Опции регулярных выражений:
s := 'AБракадабРА'; s.Matches('бра', RegexOptions.IgnoreCase) |
Примеры регулярных выражений:
‘кот|кит’ ‘к[ио]т’ ‘к[а-я]т’ ‘ко+т’ ‘кор?т’ ‘к.т’ ‘к\.т’ ‘к.*т’
‘ко{3}т’ ‘ко{2,4}т’ ‘ко[^ъыь]т’ ‘\b кот\b’
Управляющие символы и их запись в регулярных выражениях:
\ * + ? | { [ ( ) ^ $ . #
Они экранируются дополнительным \
Квантификаторы:
*
— 0 или более повторений
+
— 1 или более повторений
?
— 0 или 1 повторение
{N}
— ровно N повторений
{N,}
— не менее N повторений
{N,M}
— от N до M повторений
Директивы нулевой длины:
^
— начало строки
$
— конец строки
\b
— позиция на границе слова
Классы символов:
[abcd]
— один из символов, указанных в списке
[^abcd]
— любой из символов, кроме тех, которые указаны в списке
[a-d]
— один из символов, лежащих в указанном диапазоне
[^a-d]
— любой из символов, кроме тех, которые лежат в указанном диапазоне
\d
— десятичная цифра: [0-9]
\D
— любой символ, кроме десятичной цифры
\w
— буква, цифра или символ подчеркивания
\W
— любой символ, не являющийся словообразующим;
\s
— пробельный символ, т. е. [ \t\r\n];
\S
— любой непробельный символ;
.
— любой символ
Группы:
s := ' prepod@sfedu.ru prepod2@sfedu.ru '; foreach var m in s.Matches('(\w+)@(\w+).(\w+)') do Println(m.Groups[0], m.Groups[1], m.Groups[2], m.Groups[3]); s.Matches('(т[оае])\1*') |
Замена с помощью регулярного выражения:
s.Replace('\b\w+\b', '<$0>') s := s.Replace('\w+',m->m.Value.ToUpper); s := s.Replace('\w+',m->m.Value+'('+m.Length+')') s := '10+2=12'; s.Replace('\d+', '<$0>') // <10>+<2>=<12> s.Replace('\d+', m -> (m.Value.ToInteger*2).ToString) // 20+4=24 s := ' prepod@sfedu.ru prepod2@sfedu.ru '; s.Replace('(\w+)@(\w+).(\w+)', '$1-$2-$3') |