Очень хорошо что ты переводишь названия классов и методов. Это способствует лучшему пониманию материала. Когда слышишь то что Matches не просто заклинание, а Соответствие, запомнить проще.
Если у вас много групп получилось в шаблоне, можно им давать названия: Regex.Match(line, "(?'country'.*?)(.*?)(?'latitude'.*?)(?'longtude'.*?)(.*?)(?'timezone'.*?)"); label1.Text = match.Groups["latitude"].Value + " "+ match.Groups["longtude"].Value;
Шикарное видео! Просто хотел упомянуть, что произнося API как "апи", Вы наткнётесь на полнейшее непонимание со стороны англоговорящих IT'шников :-) Правильное прочтение - "ЭйПиАй". Может показаться неудобным поначалу, но нужно привыкать произносить правильно.
если бы не вы, я не знаю чтоб я делал, научиться чему-то на "хэллоу вордах" курсах невозможно, только здесь я получаю понимание о том что такое программирование.
Сам пишу под юнити, но захотелось сделать дополнение под ядро. И в первый же день мне пригодился регекс, юсинг для файл стрима и потоки, которые до этого времени я почти не использовал. Не знаю чтобы я делал без твоих видео, спасибо.
37:27 Ошибка! "Расширяем диапазон" и Хачатур добавляет в маску точку написав её через тире, тем самым добавив в диапазон само тире. По идее, правильно так "[^0-9,]"
Я тут недавно решил применить в работе регекс, а он как обиделся на меня. Элемент там повторялся слишком много раз. Да ещё и колокольчики были в строке...
Сначала подумал:"а зачем мне это нужно!Все эти потоки такие сложные что ппц"(я только новичок в программировании). Но знаете, полезная штука, особенно в проверке на соответствие какому либо формату в строке.
В процессе выполнения Д/З пришлось немного повозиться с конвертацией форматов из строки в формат double. Пытался перевести строковой значение широты и долготы, а C# упорно ругался что не верный формат я ему подсовываю, хотя в дебаге число красивое было, везде была точка. Как оказалось все дело было связано с региональными настройками на моем ПК поэтому пришлось конвертировать с доп.параметром: Convert.ToDouble(lblLatitude.Text, CultureInfo.InvariantCulture). Вдруг данная информация кому-то поможет :) Еще немного поигрался с регуляркой и сделал проверку на корректность введенного IP, повесил на событии клика на кнопку: Regex regex = new Regex(@"(^(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])((\.)(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])){3}$)"); if (!regex.IsMatch(textBox1.Text)) { MessageBox.Show("Введен некорректный формат IP адреса."); textBox1.Focus(); return; } С регулярками в принципе немного знаком, часто применяю в PL/SQL по работе, синтаксис отличается, но суть одна и та же в принципе.
привет, а можешь обьяснить эту строку "(^(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])((\.)(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])){3}$)"); - я понимаю, что ограничение , но как оно трактуется правильно? а то не понятно от этой части уже | [0-1] [0-9]
@@m1xaedzy Попробую объяснить, "(^(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])((\.)(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])){3}$)" 1. Символами ^ и $ мы привязываем начало и конец строки. 2. В скобках отделяем группы цифр, например первая группа из 3-х цифр это будет (25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9]) знак | означает "или", в квадратных скобках обозначаем одно число в указанном диапазоне, т.е. получается первые три числа будут или 25[0-5] - 250, 251, 252, 253, 254, 255 или 2[0-4][0-9] - 200 - 209, 210 - 219, 220 - 229, 230 - 239, 240 - 249 или [0-1][0-9]{2} (в фигурных скобках указываем сколько раз повторяться) 000-199 или [0-9]{2} 00-99 или [0-9] - 0-9 3. Дальше идет аналогичная группа, но только уже с точкой и тремя цифрами, которая повторяется 3 раза, это опять же указано в фигурных скобках ((\.)(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])){3} Надеюсь, понятно объяснил.
Уважаемый Хачатур, можно ли таким способом парсить страницу сетевого принтера, а именно количество тонера определенных цветов? Страница сетевого принтера имеет Web интерфейс с этими данными.
При парсинге страница выглядит так, как и просмотр кода: ,а на картинке все ясно yadi.sk/i/mu3BUzxnOWiuXA где прячутся данные о состоянии картриджей? Загадка.
А вот такой вопрос по теме. Что если мне в текстБокс нужно ввести дату по такому шаблону "гггг/мм/дд". И этот же текст там введен по умолчанию серым цветом но при клике текстБокс очищается и цвет текста меняется на черный. Если я выхожу ничего не введя то обратно возвращается текст "гггг/мм/дд" и цвет снова меняется на серый. То есть "гггг/мм/дд" это пример того как именно нужно ввести дату. И вот какую маску нужно вводить? Я ввел так if (Regex.IsMatch(releaseDateTextBox1.Text, "[^0-9гмд//]")) И это работает, но при этом разрешает пользователю помимо цифр и слеша вводить и буквы, а если [^0-9//] сделать то сломается серый текст "пример". Что посоветуете? И еще вопрос. Можно ли как то сделать, что б в данном примере 5-й и 8-й символ при вводе всегда был "/". То есть ввожу я вручную например год 1994 и сразу после этого автоматически подставляется "/" потом ввожу месяц 09 и после него так же автоматически вводится "/". Похожее происходит когда в банковском приложении вводишь номер телефона, только цифры, но в между цифра сами вставляются "(" ")" "-" в конкретных местах
Добрый день! Помогите подобрать паттерн regex для поиска выражений в строке по следующему принципу 1) выражение может содержать любые символы, но заканчиваться запятой, если оно стоит не в конце строки. Запятые в скобках не учитываются, а саму запятую в конце захватывать не нужно Например строка "word,word(1,2),word(a(1,2)),b(b)" должна разделиться на word word(1,2) word(a(1,2)) b(b) как-то так. Заранее спасибо!
Не знаю, курица от яйца или яйцо от курицы, но в академии ШАГ(itstep) задают домашние задания по вашим видео, как минимум на эту тему(буквально, задание по regex с эл. почтой, парсингу информации по курсам валют... очень удивился, когда решил посмотреть видео по теме и там один в один задания)
Привет, Христ. У меня вопрос такой, есть программа (Отчёт) в программе какие то данные, которые нужно рассылать ежедневно людям, каким образом можно настроить автоматическую рассылку? Пока что на что у меня хватило идей, это с какого-нибудь компьютера путем написания макроса делать скриншоты интерфейса и делать рассылку. Возможно ли это реализовать как то в си шарп без помощи других программ?
Привет. Всё то, что Ты написал, для Меня займёт минут 20. Поэтому можешь начинать учить уроки =) Правда про отправку на e-mail Я пока не снимал видео и про скриншоты, но это легко. Я просто не понял - вопрос всего лишь в том, возможно ли это на C#? Да. Легко. Более чем легко.
@@XpucT Для уточнения, я разобрался как отправлять сообщение и отдельно разобрался как делать скриншот, но я не могу этот скриншот вставить в тело письма из-за разного типа данных, а нужно именно, чтобы картинка была в теле письма, а не во вложении.
Извините я не понял одну вещь в конце. В условие if мы передаем метод IsMatch который возвращает true если текст соответствует указанному регулярному выражению и false если не соответствует. Так вот когда мы вводим цифру то в if помещается true но код в блоке if не выполняется. Как он понимает когда выполнять код в блоке а когда нет? Мы же не пишем вот так if (Regex.IsMatch(textBox1.Text, "[^0-9-.]") == false). Получается что если там Regex то он по умолчанию срабатывает только на false или как это понять?
Это уже обман зрения какой-то в Вашем вопросе =)) Смотрите: IsMatch("123") - это уже даёт true или false. Не нужно IsMatch("123") приводить к сравнению. Это как: label1.Text == string? Само собой string =) Лучше всего не перематывая идти по каждому уроку с Урока 0 и до конца 👍
@@XpucT Теперь понял. У нас же в маске стоит ^ и поэтому если мы цифру вводим получаем false и блок не срабатывает. Не внимательно просто слушал урок) Извините
25:11 Подскажи пожалуйста, как сделать так, чтобы при каждом нажатии на кнопку курс доллара обновлялся (допустим, курс постоянно меняется)? Результат выражения записывается в переменную и во второй раз уже не парсится(( Нигде ответа не нашел.
Хачатур, привет. Есть ли вообще разница при использовании данного кода при событии KeyPress или твоего с помощью Regex при событии TextChange? char number = e.KeyChar; if (!Char.IsDigit(number) && number != 8 && number != 44 && number != 46) // цифры, клавиша BackSpace и запятая { e.Handled = true; }
Всем привет. Кто знает, как вытянуть имя и фамилию, из файла, если их очень много и они все различные. Пример: First name: Mark Last name: Full Sport: Fitness hall Duration: 8 month Time: After 16:00 Price: 0 First name: Micle Last name: Huliy Sport: Gym + crossfit area Duration: 1 month Time: After 16:00 Price: 0 First name: Dimon-Pokimon Last name: Mikitin Sport: United Duration: One year Time: After 16:00 Price: 0 First name: Natalya Last name: Hyliy Sport: Fighting hall Duration: 1 month Time: Before 16:00 Price: 0 First name: Bogdana Last name: NoName) Sport: Personal training Duration: 1 month Time: After 16:00 Price: 0 First name: C# Last name: Top Sport: United Duration: 1 month Time: After 16:00 Price: 0 Надо сделать на C#
А не будет проще разбить входную строку на масив символов (char), а потом циклом for получить ASCII код каждого елемента и таким образом проводить проверку входных строк на предмет наличия чисел, букв, или других символов ?
Хачатур, фантазии не хватает, подскажи как спарсить большие данные? я к чему? вот у меня есть такой xml country Россия province Приволжский федеральный округ province Удмуртская Республика area городской округ Ижевск locality Ижевск street улица Ленина house 54 и мне нужно самый нижний улица Холмогорова . Так мой код будет выглядеть пздц ужасно Regex.Match(line, "(.*?)(.*?)(.*?)(.*?)(.*?) и т.д"); Как быть?
На самом деле ужасно не это, а сам xml. Я вижу такой сценарий: string xml = "Твой xml"; string tempxml = xml.Substring(xml.IndexOf("street") + 21); // Удалить всё, что идёт до "street", включая "street" string result = tempxml.Substring(0, tempxml.IndexOf("
Помимо сайта metanit и msdn для изучения регулярных выражений советую ресурс ravesli - ravesli.com/uroki-po-regexp/. Там как раз разобран вопрос с использованием мультипликаторов *? +? ??, только нормальным человеческим языком и с примерами, а не "Соответствует предыдущему элементу один или несколько раз, но как можно меньшее количество раз."... Microsoft молодцы, топовое объяснение, спасибо Ну а видео как всегда топ! Спасибо Вам за качественное объяснение и приятную подачу! Краткая разница между * + ? и *? +? ??: 1. (*): top kontent + t.*n => top konten (тут он будет искать самое последнее совпадение "n" в строке) 2. (*?): top kontent + t.*?n => top kon (а тут он выберет первое совпадение "n") (подробнее тут ravesli.com/regulyarnye-vyrazheniya-osnovy/)
Можешь сделать отдельный видос о том, как «забустить» свое приложение winForms? То есть ускорить его. На старте в том числе, а то формы довольно долго запускаются иногда.
Разбирался со своим кодом и пришла идея как его упростить (много замен в тексте). Решил поделиться :) string Text = "1 Onee, 2 Two, 33 Throoee is good."; var pattern = new List() { @"\d+", "ee", "oo" }; var output = new List() { "Цифра", "ёBbb-т", "OOO-T" };
if(pattern.Count == output.Count) { for (int i = 0; i < output.Count; i++) { var rx = new Regex(pattern[i], RegexOptions.Compiled | RegexOptions.IgnoreCase); //Text = Regex.Replace(Text, pattern[i], output[i]); Text = rx.Replace(Text, output[i]); } Console.WriteLine("Результат: " + Text); } else Console.WriteLine("Ошибка: Количество pattern и замен не совпадает!");
Здравствуйте, хорошое видео много что полезного узнал, но вот так и не смог применить для себя, к примеру у меня есть файл в нем имена и номера телефонов, нужно отсортировать только номера, причем номера могут быть введены как с "+" так и без... ну и количество цифр может быть разное, я применил "Regex find = new Regex(@"\+*[0-9]*");" но работает криво, в консоли много лишних строк появляется... буду благодарен за помощь...
10:05 Неправильно. Знак вопроса означает не "непонятно сколько он повторяется". Правильно сказать что это минимальный квантификатор. Т.е. порядок внутреннего перебора знаком вопроса изменили.
Подскажи, вот у тебя описания методов(в подсказках которые) на русскомб а у меня при вроде бы русской студио они на английском, где включить, или что докачать?
Привет, у меня небольшая проблема с картой lat = Convert.ToDouble(match.Groups[11].Value); // Широта lng = Convert.ToDouble(match.Groups[13].Value); // Долгота gMapControl1.Position = new PointLatLng(lat, lng); Мне пишет что не получилось преобразовать
@@XpucT var lat = Convert.ToDouble(match.Groups[11].Value); // Широта var lng = Convert.ToDouble(match.Groups[13].Value); // Долгота gMapControl1.Position = new PointLatLng(lat, lng); Я сделал так, пишет неверный формат
@@XpucT Я понял проблему, lat = Convert.ToDouble(match.Groups[11].Value); // Широта lng = Convert.ToDouble(match.Groups[13].Value); // Долгота Эти строки почему-то не хотят конвентировать, как бы я не крутил, мне всегда пишет "Входная строка имела неверный формат.". И через parse пробовал. Группы и тд всё правильно в label всё выводится, но не конвентируется. Я хз
у меня почему то когда я через WebClient к www.cbr.ru/ и многими другими сайтами то ничего не происходит и выдаёт предупреждение (в среде разработки) "В целях безопасности браузер ограничил отображение файлом активного содержимого, которое может получить доступ к компьютеру. Щелкните здесь для выбора нужного действия"
Привет 🖐 Также добавить счётчик, который будет foreach Match добавлять в label1.Text Думай, как это реализовать. Подсказку дал =) Просто подсчитывай каждое успешное нахождение. Либо можно самому разбить цифру 2 на составные. Своей опять же формулой.
@@Fioletka_YT Вам нужно посмотреть видео про for (int i =0.... ua-cam.com/video/rONfuDgqpHU/v-deo.html Также есть видео про LINQ, где приводится хороший пример с IEnumerable: ua-cam.com/video/gF4X3yr0nsA/v-deo.html
@@XpucT Пока в тупике. Создал два текстбокса один в котором текст во втором нумерация. Вот этот код работает крайне медленно)) Если поставить на событие текстового текстбокса код рабочий но медлительный) countN = textBoxLesson.Text.Count(x => x == ' '); textBoxNumbers.Clear(); for (int i = 1; i x == ' '))); По скорости второй вариант меня вполне устраивает, правда я подвязан к 1м. строк ну мне этого за глаза и всегда можно добавить. Так же удивительное явление происходит в конструкторе при создании обьекта циклы работают молненосно быстро. Вам спасибо за качественный контент. Если есть что подсказать буду крайне благодарен.
Круто! По самому Regex'у все понятно, а вот с масками, как они составляются, что-то не очень ))) Я не про это видео, а про себя в целом, постоянно косячу с масками в регулярках, особенно, когда, например, надо не просто сделать маску вида (.*?), а нафигачить чуть ли не весь словарь спецсимволов регулярок(например когда ссылки выдергиваешь), вот с этим прям бЯда! Может видосик сделаете на эту тему? или только практика поможет? )))
Решил для получения опыта написать дополнительно маленькую программку, которая с API сайта Московской биржи получает инфу по ц.б., у них несколько страниц каждая отвечает за свою инфу. Вот на одной из страниц (xml - пример страницы iss.moex.com/iss/securities/SU26223RMFS6/aggregates.xml?date=2020-05-19) столкнулся с проблемой, что параметры внутри тега могут располагаться в разных местах (пока не понял из-за чего, но IE и Лис отображают в разных местах, да и в C# вроде гуляют). Так сказать на халявку прорваться с группами регулярки не получилось, долго игрался и вроде решил данную проблему, но мне кажется намудрил через чур..., ниже кусок кода нужна отловить запись где market_name="bonds": private void btnINFO_Click(object sender, EventArgs e) { string line = ""; string sdate = dateSecItogo.Value.ToString("yyyy-MM-dd", CultureInfo.CurrentCulture); string[] separator = { " " }; string urlItogo = $@"iss.moex.com/iss/securities/{txtSECID.Text}/aggregates.xml?date={sdate}"; using (WebClient wc = new WebClient()) { wc.Encoding = Encoding.UTF8; //Информация по итогам торгов line = wc.DownloadString($"{urlItogo}"); var arline = line.Split(separator, StringSplitOptions.RemoveEmptyEntries).ToList(); line = string.Join("", arline.Where(x => x.Contains("market_name=\"bonds\""))); Match match = Regex.Match(line, "numtrades=\"(.*?)\""); txtNumtrades.Text = match.Groups[1].Value; match = Regex.Match(line, "volume=\"(.*?)\""); txtVolume.Text = match.Groups[1].Value; match = Regex.Match(line, "value=\"(.*?)\""); txtValue.Text = match.Groups[1].Value; } } Думал через json (iss.moex.com/iss/securities/SU26223RMFS6/aggregates.json?date=2020-05-19), но мне показалась там сложнее эти данные выцепить, т.к. боюсь что колонки тоже могут менять свои позиции. Хачатур, если не сложно посмотри плиз своим опытным взглядом, может как всегда есть более простое решение, о котором я не знаю :)
@@XpucT Да, есть. Вот ссылка на json (iss.moex.com/iss/securities/SU26223RMFS6/aggregates.json?date=2020-05-19), но не понимаю как лучше выцепить данные, боюсь что колонки тоже могут менять свои позиции.
@@XpucT Спасибо тебе большое! Данный способ гораздо проще и удобнее, нужно только подробнее по-изучать его. P.S. Как сказал великий классик А.П.Чехов - Краткость - сестра таланта!
Писал в универе на Паскале задачки какие-то, а тут сайты парсить? Для меня это как машинку получить в детстве, неужели делаю что-то более, чем консольная херь, которая считает количество отрицательных нечётных цифр в числе.. Огромное спасибо за уроки, это безумие!
Хачатур, снимите, пожалуйста, полноценное видео про парсинг сайтов без api, на которых есть пагинация и полускрытая (например есть кусок № тел, но пока не кликнешь, весь не виден) информация, с использованием, anglesharp и htmlagilitypack.
@@irinaturlak по-моему там много лишнего, а у Хачатура есть шикарный скил делать всё лаконично и без потери в функционале или скорости, плюс рассказывает более просто и доходчиво, в отличии от экстремшиков, которые любят выпендриться терминами.
Да. Безусловно. Но чтобы погрузиться не столько в кодовую часть, как в сами Регулярные выражения в целом, чтобы это было универсально для любого языка, обязательно к просмотру это ➜ ua-cam.com/video/9Xv3zFcxLrw/v-deo.html
Здравствуйте! Не могу справиться с элементарной вещью, стыдно, каюсь. string s = "Мама мыла раму"; Match match = Regex.Match(s, "Mам(.*)раму"); Console.WriteLine(match.Groups[1].Value); Т.е. пытаюсь вывести кусок текста между "мамой" и "рамой". Где я напортачила??
Привет, у меня есть json ответ, в нем есть много повторяющихся значений которые мне нужно спарсить Вот пример: Там где "Здесь то что нужно парсить" = на каждой строке новое значение "templateId":"Name:(Здесь то что нужно парсить)", Как мне спарсить это и вывести в textBox Чтобы было Akula Ananas Banan Regex То есть спаршеное значение
Сделал string[] matchArray = new string[matchCount.Count]; for ( int i = 0;i < matchCount.Count; i++) { matchArray[i] = matchList.Value; } richTextBox1.Text = string.Join(" ", matchArray); Теперь выводит то количество сколько находится в запросе, но все они одинаковые то-есть был Banan 1 в запросе и идет Banan 15 раз через
Привет. Тебе нужно дойти до урока про LINQ. Но если нужно прямо сейчас, то: var list = File.ReadAllLines(json ответ).ToList(); var newlist = list.Select(x => x.Replace("\"templateId\":\"Name:(", "")).Select(x => x.Replace(")\",", "")); MessageBox.Show(string.Join(Environment.NewLine, newlist));
@@zumwolfzum контрола label1 не существует. Ты наверно пропустила уроки, потому что в один прекрасный момент у нас в проекте всегда был есть и будет label Просто возьми Label из панели элементов и перенеси на форму.
Местами не понимаю автора, рассказывает про мощный регекс, но для того чтоб отменить ввод в тextbox не использует event Argument, а идет через какие то грабли
Хачатур, я тут, кажется, нафлудил, т.к. у меня че-то ютуб глючит. Я не вижу свои комментарии спустя несколкьо секунд после публикации, хотя видно что счетчик комментариев увеличивается. Если всем они отображаются, можно почиситить лишнее)
Привет 🖐 Я не успеваю прочесть комменты. Успел заметить только Первое, что понравилось, потом второе, что понравилось. Целиком не вижу, не пойму зачем UA-cam их режет. Всего успел заметить 4 коммента.
Наткнулся на задачу: написать регулярное выражение, с помощью которого проверяется двоичное число на делимость на 3 в десятичном формате. Насколько это сложно?
Привет! Такая проблема появилась, при загрузке разметки сайта в переменную вылетает ошибка 400 Bad Request. Сама ссылка рабочая, с браузера все замечательно открывается , уже на неделю завис проект xd. Может ты когда-то встречался с такой проблемой? В инете все советы оказались бесполезными. Вот ссылка - www.myscore.com.ua/match/df6IGWB9/#standings;over_under;overall;2.5
Нет, об этом говорил в Уроке 1. Довольно часто слетает либо какой-то модуль, либо обновление целиком. Нужна возможность быстрого отката. Быстрее, чем виртуалку сбросить на точку сохранения ничего нельзя. Собственное железо к тому же не требуется перезагружать.
@@XpucT Спасибо за программку! Пригодилась для хорошего примера! Только вот новое есть... да и вот почему protected, internal... Жаль уроков новых нету (
Здоров Всем. Может кому пригодится нашёл сайт для быстрой Наглядной проверки регулярных выражений regex101.com/ в Test String пишите свой текст для проверки а в Regular Expression свое регулярное выражение и в поле Test String автоматом подсвечивается найденные совпадения. мне помогло
Как только начал знакомиться с Регулярными выражениями, сразу понял почему они так называются - при их использовании хочется регулярно выражаться
Автор с самого начала был прав, когда сказал что "Лучше него не кто не объяснит". Огромное спасибо автору. Лайк в копилку вам.
Очень хорошо что ты переводишь названия классов и методов. Это способствует лучшему пониманию материала. Когда слышишь то что Matches не просто заклинание, а Соответствие, запомнить проще.
Сервер Центробанка упал после твоих учеников
Если у вас много групп получилось в шаблоне, можно им давать названия:
Regex.Match(line, "(?'country'.*?)(.*?)(?'latitude'.*?)(?'longtude'.*?)(.*?)(?'timezone'.*?)");
label1.Text = match.Groups["latitude"].Value + "
"+ match.Groups["longtude"].Value;
Лучший преподаватель которого я встречал в жизни)) Тупые выражения превращаются в интересный и мощный инструмент. Спасибо!)
Хачатур, привет! Тебя ждет великое будущее как обзорщика "Вилсаком". Приятно слушать и граматное обучение! Спасибо!
Лучший из лучших. Спасибо Хачатур, что снял такие видео... Если хотя бы, что то заработаю на С# с меня на кофе))))
Шикарное видео!
Просто хотел упомянуть, что произнося API как "апи", Вы наткнётесь на полнейшее непонимание со стороны англоговорящих IT'шников :-)
Правильное прочтение - "ЭйПиАй". Может показаться неудобным поначалу, но нужно привыкать произносить правильно.
Спасибо за нормальное объяснение. Отдельно + за харизму :)
Классная подача, очень полезный урок. Спасибо!
Часто избегал регулярные выражения, теперь не буду, спасибо тебе👍
Ага! Такое же решение принял! Раньше тоже избегал их как огня
Спасибо за объяснение!
Спасибо Вам огромное!!!! Вы единственный кто доступно объяснил!)))
если бы не вы, я не знаю чтоб я делал, научиться чему-то на "хэллоу вордах" курсах невозможно, только здесь я получаю понимание о том что такое программирование.
Красавчик ☝
Perfecto👌 хорошая инструкция!
Сам пишу под юнити, но захотелось сделать дополнение под ядро. И в первый же день мне пригодился регекс, юсинг для файл стрима и потоки, которые до этого времени я почти не использовал. Не знаю чтобы я делал без твоих видео, спасибо.
Огромное спасибо за уроки!
Хороооош !
Спасибо большое !
Классный чувак. Отлично объясняет!
Лайк однозначно! Автору спасибо за объяснение))))
Очень ржачная подача, спасибо
Отлично! Разжевал даже больше, чем нужно))
37:27 Ошибка! "Расширяем диапазон" и Хачатур добавляет в маску точку написав её через тире, тем самым добавив в диапазон само тире. По идее, правильно так "[^0-9,]"
Я тут недавно решил применить в работе регекс, а он как обиделся на меня. Элемент там повторялся слишком много раз. Да ещё и колокольчики были в строке...
Очень познавательный и смешной выпуск. Лайк! Кстати на powershell хорошо тренировать regex и регулярные выражения
Ну, хз. Я в школе ещё в 2000 году форматирование текста проходил на информатике)))
спасибо чувак ты лучший!
🤟
Спасибо! Прикольное изложение и объяснение! :)
Как можно ограничить ввод символов в tbx? Если например doublу, int, создать ограничение по типу. Есть где примеры?
Сначала подумал:"а зачем мне это нужно!Все эти потоки такие сложные что ппц"(я только новичок в программировании). Но знаете, полезная штука, особенно в проверке на соответствие какому либо формату в строке.
В процессе выполнения Д/З пришлось немного повозиться с конвертацией форматов из строки в формат double. Пытался перевести строковой значение широты и долготы, а C# упорно ругался что не верный формат я ему подсовываю, хотя в дебаге число красивое было, везде была точка. Как оказалось все дело было связано с региональными настройками на моем ПК поэтому пришлось конвертировать с доп.параметром: Convert.ToDouble(lblLatitude.Text, CultureInfo.InvariantCulture). Вдруг данная информация кому-то поможет :)
Еще немного поигрался с регуляркой и сделал проверку на корректность введенного IP, повесил на событии клика на кнопку:
Regex regex = new Regex(@"(^(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])((\.)(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])){3}$)");
if (!regex.IsMatch(textBox1.Text))
{
MessageBox.Show("Введен некорректный формат IP адреса.");
textBox1.Focus();
return;
}
С регулярками в принципе немного знаком, часто применяю в PL/SQL по работе, синтаксис отличается, но суть одна и та же в принципе.
привет, а можешь обьяснить эту строку "(^(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])((\.)(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])){3}$)"); - я понимаю, что ограничение , но как оно трактуется правильно? а то не понятно от этой части уже | [0-1] [0-9]
@@m1xaedzy Попробую объяснить,
"(^(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])((\.)(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])){3}$)"
1. Символами ^ и $ мы привязываем начало и конец строки.
2. В скобках отделяем группы цифр, например первая группа из 3-х цифр это будет
(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])
знак | означает "или", в квадратных скобках обозначаем одно число в указанном диапазоне, т.е. получается первые три числа будут
или 25[0-5] - 250, 251, 252, 253, 254, 255
или 2[0-4][0-9] - 200 - 209, 210 - 219, 220 - 229, 230 - 239, 240 - 249
или [0-1][0-9]{2} (в фигурных скобках указываем сколько раз повторяться) 000-199
или [0-9]{2} 00-99
или [0-9] - 0-9
3. Дальше идет аналогичная группа, но только уже с точкой и тремя цифрами, которая повторяется 3 раза, это опять же указано в фигурных скобках
((\.)(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[0-9]{2}|[0-9])){3}
Надеюсь, понятно объяснил.
@@Akelow спасибо огромное!!!))
Уважаемый Хачатур, можно ли таким способом парсить страницу сетевого принтера, а именно количество тонера определенных цветов? Страница сетевого принтера имеет Web интерфейс с этими данными.
Легко!
При парсинге страница выглядит так, как и просмотр кода:
,а на картинке все ясно
yadi.sk/i/mu3BUzxnOWiuXA
где прячутся данные о состоянии картриджей? Загадка.
@@MrAlexius666 открой иструменты разработчика и на вкладке "нетворк" смотри куда запросы идут при обновлении страницы.
Супер!
А вот такой вопрос по теме. Что если мне в текстБокс нужно ввести дату по такому шаблону "гггг/мм/дд". И этот же текст там введен по умолчанию серым цветом но при клике текстБокс очищается и цвет текста меняется на черный. Если я выхожу ничего не введя то обратно возвращается текст "гггг/мм/дд" и цвет снова меняется на серый. То есть "гггг/мм/дд" это пример того как именно нужно ввести дату.
И вот какую маску нужно вводить? Я ввел так
if (Regex.IsMatch(releaseDateTextBox1.Text, "[^0-9гмд//]"))
И это работает, но при этом разрешает пользователю помимо цифр и слеша вводить и буквы, а если [^0-9//] сделать то сломается серый текст "пример". Что посоветуете?
И еще вопрос. Можно ли как то сделать, что б в данном примере 5-й и 8-й символ при вводе всегда был "/". То есть ввожу я вручную например год 1994 и сразу после этого автоматически подставляется "/" потом ввожу месяц 09 и после него так же автоматически вводится "/".
Похожее происходит когда в банковском приложении вводишь номер телефона, только цифры, но в между цифра сами вставляются "(" ")" "-" в конкретных местах
Страшно за эмоциональное состояние челов, которые после просмотра реально подумали, что JSON надо парсить вручную. Но это закаляет)
написал длинное выражение, прочитал вслух, вызвал сатану
Отличное видео и все разжевано, видимо я просто тупой)) Надо будет пересмотреть еще раз, но однозначно лайк!))
Добрый день! Помогите подобрать паттерн regex для поиска выражений в строке по следующему принципу
1) выражение может содержать любые символы, но заканчиваться запятой, если оно стоит не в конце строки. Запятые в скобках не учитываются, а саму запятую в конце захватывать не нужно Например
строка "word,word(1,2),word(a(1,2)),b(b)" должна разделиться на
word
word(1,2)
word(a(1,2))
b(b)
как-то так. Заранее спасибо!
Не знаю, курица от яйца или яйцо от курицы, но в академии ШАГ(itstep) задают домашние задания по вашим видео, как минимум на эту тему(буквально, задание по regex с эл. почтой, парсингу информации по курсам валют... очень удивился, когда решил посмотреть видео по теме и там один в один задания)
Привет, Христ.
У меня вопрос такой, есть программа (Отчёт) в программе какие то данные, которые нужно рассылать ежедневно людям, каким образом можно настроить автоматическую рассылку? Пока что на что у меня хватило идей, это с какого-нибудь компьютера путем написания макроса делать скриншоты интерфейса и делать рассылку.
Возможно ли это реализовать как то в си шарп без помощи других программ?
Привет.
Всё то, что Ты написал, для Меня займёт минут 20.
Поэтому можешь начинать учить уроки =)
Правда про отправку на e-mail Я пока не снимал видео и про скриншоты, но это легко.
Я просто не понял - вопрос всего лишь в том, возможно ли это на C#? Да. Легко. Более чем легко.
@@XpucT Рад что это легко сделать) спасибо за ответ. В будущем в своих роликах не планируешь показать какой нибудь простой пример как это реализовать?
@@bezizibe Уже записано. Много тем записано. Всё обязательно покажу.
@@XpucT Для уточнения, я разобрался как отправлять сообщение и отдельно разобрался как делать скриншот, но я не могу этот скриншот вставить в тело письма из-за разного типа данных, а нужно именно, чтобы картинка была в теле письма, а не во вложении.
@@bezizibe вот это не пробовал. Но знаю, что можно указать html синтаксис и встраивать в тело письма.
Если не получится, пиши.
I love you! Спасибо тебе!
Извините я не понял одну вещь в конце. В условие if мы передаем метод IsMatch который возвращает true если текст соответствует указанному регулярному выражению и false если не соответствует. Так вот когда мы вводим цифру то в if помещается true но код в блоке if не выполняется. Как он понимает когда выполнять код в блоке а когда нет? Мы же не пишем вот так if (Regex.IsMatch(textBox1.Text, "[^0-9-.]") == false). Получается что если там Regex то он по умолчанию срабатывает только на false или как это понять?
Это уже обман зрения какой-то в Вашем вопросе =))
Смотрите:
IsMatch("123") - это уже даёт true или false. Не нужно IsMatch("123") приводить к сравнению.
Это как:
label1.Text == string?
Само собой string =)
Лучше всего не перематывая идти по каждому уроку с Урока 0 и до конца 👍
@@XpucT Теперь понял. У нас же в маске стоит ^ и поэтому если мы цифру вводим получаем false и блок не срабатывает. Не внимательно просто слушал урок) Извините
25:11 Подскажи пожалуйста, как сделать так, чтобы при каждом нажатии на кнопку курс доллара обновлялся (допустим, курс постоянно меняется)? Результат выражения записывается в переменную и во второй раз уже не парсится(( Нигде ответа не нашел.
Это Тебе нужно далее по урокам и в отдельном потоке, а ещё лучше async Task с определённым интервалом опрашивать.
Либо повесить метод в timer.
Алё, я еще видос не досмотрел а ты уже лайк поставил)))
Скорость 💪
Хачатур, привет.
Есть ли вообще разница при использовании данного кода при событии KeyPress или твоего с помощью Regex при событии TextChange?
char number = e.KeyChar;
if (!Char.IsDigit(number) && number != 8 && number != 44 && number != 46) // цифры, клавиша BackSpace и запятая
{
e.Handled = true;
}
То же оригинально 👍
Нужно будет сегодня вообще сказать про KeyPress, когда IP забит.
Всем привет. Кто знает, как вытянуть имя и фамилию, из файла, если их очень много и они все различные. Пример:
First name: Mark
Last name: Full
Sport: Fitness hall
Duration: 8 month
Time: After 16:00
Price: 0
First name: Micle
Last name: Huliy
Sport: Gym + crossfit area
Duration: 1 month
Time: After 16:00
Price: 0
First name: Dimon-Pokimon
Last name: Mikitin
Sport: United
Duration: One year
Time: After 16:00
Price: 0
First name: Natalya
Last name: Hyliy
Sport: Fighting hall
Duration: 1 month
Time: Before 16:00
Price: 0
First name: Bogdana
Last name: NoName)
Sport: Personal training
Duration: 1 month
Time: After 16:00
Price: 0
First name: C#
Last name: Top
Sport: United
Duration: 1 month
Time: After 16:00
Price: 0
Надо сделать на C#
А в каком формате вывод нужен?
Mark Full
Micle Huliy
Dimon-Pokimon Mikitin
Natalya Hyliy
так?
@@XpucT в один textBox имя, а во второй texBox фамилию
@@markfull207 то есть на основании файла создать на форме текстбоксы?
Не очень много будет?
@@XpucT Да, мне так и нужно сделать. Нет, не будет так много, потому что у меня такое ТЗ
@@XpucT Буду очень рад Вам, если Вы мне поможете
А не будет проще разбить входную строку на масив символов (char), а потом циклом for получить ASCII код каждого елемента и таким образом проводить проверку входных строк на предмет наличия чисел, букв, или других символов ?
Тоже неплохо 👏 Вот за это люблю программирование, что всегда можно что-то улучшить и сделать проще 😇
@@XpucT Мб уже поздновато, но я сделал так)
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
char ipAdress = (char)e.KeyChar;
int asciNum = (int)ipAdress;
if (!(asciNum == 8 || asciNum >= 48 && asciNum
Хачатур, фантазии не хватает, подскажи как спарсить большие данные? я к чему? вот у меня есть такой xml
country
Россия
province
Приволжский федеральный округ
province
Удмуртская Республика
area
городской округ Ижевск
locality
Ижевск
street
улица Ленина
house
54
и мне нужно самый нижний улица Холмогорова
. Так мой код будет выглядеть пздц ужасно
Regex.Match(line, "(.*?)(.*?)(.*?)(.*?)(.*?) и т.д");
Как быть?
На самом деле ужасно не это, а сам xml.
Я вижу такой сценарий:
string xml = "Твой xml";
string tempxml = xml.Substring(xml.IndexOf("street") + 21); // Удалить всё, что идёт до "street", включая "street"
string result = tempxml.Substring(0, tempxml.IndexOf("
26:13 айпи ху ис (IP who is) улыбнуло))
Отличное видео! Спасибо! Можешь подсказать, что лучше учить, WPF или UWP?
docs.microsoft.com/ru-ru/windows/apps/desktop/choose-your-platform
@@XpucT Спасибо! Кстати очень быстро)
Здравствуйте. Не подскажите как сделать так чтобы из строки выводились только цифры
Добрый вечер 🖐
string only_numbers = new String("Есть 4 и даже 5".Where(Char.IsDigit).ToArray());
Но Matches же это спички. Я не понял почему у регулярного выражения есть свойства спички, зачем они им и что они собрались поджигать?
спасибо
Помимо сайта metanit и msdn для изучения регулярных выражений советую ресурс ravesli - ravesli.com/uroki-po-regexp/. Там как раз разобран вопрос с использованием мультипликаторов *? +? ??, только нормальным человеческим языком и с примерами, а не "Соответствует предыдущему элементу один или несколько раз, но как можно меньшее количество раз."... Microsoft молодцы, топовое объяснение, спасибо
Ну а видео как всегда топ! Спасибо Вам за качественное объяснение и приятную подачу!
Краткая разница между * + ? и *? +? ??:
1. (*): top kontent + t.*n => top konten (тут он будет искать самое последнее совпадение "n" в строке)
2. (*?): top kontent + t.*?n => top kon (а тут он выберет первое совпадение "n")
(подробнее тут ravesli.com/regulyarnye-vyrazheniya-osnovy/)
Домашку сделал, пошел гулять!
github.com/adamoroff/IP_Info_HW - кому интересно вдруг.
Твёрдая пятёрка 👍
"Загугли, как выглядит IP' чет орнул
Можешь сделать отдельный видос о том, как «забустить» свое приложение winForms? То есть ускорить его. На старте в том числе, а то формы довольно долго запускаются иногда.
Разбирался со своим кодом и пришла идея как его упростить (много замен в тексте). Решил поделиться :)
string Text = "1 Onee, 2 Two, 33 Throoee is good.";
var pattern = new List() { @"\d+", "ee", "oo" };
var output = new List() { "Цифра", "ёBbb-т", "OOO-T" };
if(pattern.Count == output.Count)
{
for (int i = 0; i < output.Count; i++)
{
var rx = new Regex(pattern[i], RegexOptions.Compiled | RegexOptions.IgnoreCase);
//Text = Regex.Replace(Text, pattern[i], output[i]);
Text = rx.Replace(Text, output[i]);
}
Console.WriteLine("Результат:
" + Text);
}
else
Console.WriteLine("Ошибка:
Количество pattern и замен не совпадает!");
Здравствуйте, хорошое видео много что полезного узнал, но вот так и не смог применить для себя, к примеру у меня есть файл в нем имена и номера телефонов, нужно отсортировать только номера, причем номера могут быть введены как с "+" так и без... ну и количество цифр может быть разное, я применил "Regex find = new Regex(@"\+*[0-9]*");" но работает криво, в консоли много лишних строк появляется... буду благодарен за помощь...
Здесь поможет LINQ.
Продолжайте смотреть, до LINQ осталось немного. Предпоследнее видео на канале.
Благодарность, уроки крутые ) Подача классная )
@@XpucT посмотрел, но к сожалению не увидел там ответ...
10:05 Неправильно. Знак вопроса означает не "непонятно сколько он повторяется". Правильно сказать что это минимальный квантификатор. Т.е. порядок внутреннего перебора знаком вопроса изменили.
Подскажи, вот у тебя описания методов(в подсказках которые) на русскомб а у меня при вроде бы русской студио они на английском, где включить, или что докачать?
Если не ошибаюсь, это зависит от версии .NET Framework.
Проект ➜ Свойства ➜ Сборка ➜ Выбери последний .NET Framework.
Как сделать, чтобы в visual studio контекстные подсказки были на русском?
Погуглите IntelliSense и IntelliCode.
В Настройках это есть. Если есть, но на английском, то установить .NET Framework SDK.
Привет, у меня небольшая проблема с картой
lat = Convert.ToDouble(match.Groups[11].Value); // Широта
lng = Convert.ToDouble(match.Groups[13].Value); // Долгота
gMapControl1.Position = new PointLatLng(lat, lng);
Мне пишет что не получилось преобразовать
Привет 🖐
Сделай выше lat и lng не double, а var, ибо он в коде на английском ставит плавающую запятую точкой, а при преобразовании запятую.
@@XpucT var lat = Convert.ToDouble(match.Groups[11].Value); // Широта
var lng = Convert.ToDouble(match.Groups[13].Value); // Долгота
gMapControl1.Position = new PointLatLng(lat, lng);
Я сделал так, пишет неверный формат
делал я всё по этому примеру ua-cam.com/video/DryXLe9MS28/v-deo.html
@@XpucT Я понял проблему,
lat = Convert.ToDouble(match.Groups[11].Value); // Широта
lng = Convert.ToDouble(match.Groups[13].Value); // Долгота
Эти строки почему-то не хотят конвентировать, как бы я не крутил, мне всегда пишет "Входная строка имела неверный формат.". И через parse пробовал. Группы и тд всё правильно в label всё выводится, но не конвентируется. Я хз
у меня почему то когда я через WebClient к www.cbr.ru/ и многими другими сайтами то ничего не происходит и выдаёт предупреждение (в среде разработки) "В целях безопасности браузер ограничил отображение файлом активного содержимого,
которое может получить доступ к компьютеру. Щелкните здесь для выбора нужного действия"
Пример конкретного кода можно?
@@XpucT я сейчас видео сделаю и скину
@@Камрад-с1и можно код, видео не надо. Мне проще будет проверить.
@@XpucT private void Button1_Click(object sender, EventArgs e)
{
string line = "";
using (WebClient wc = new WebClient())
{
line = wc.DownloadString("www.cbr.ru/");
}
label1.Text = line;
}
видео на всякий случай: yadi.sk/i/HSSsuQTeYU02Ng
@@XpucTВсё получилось с TextBox но с лайбл что то не работает щас ещё посижу.
Сделай пожалуйста видео по патернам и Zenject! Спасибо крутые уроки.
Приветствую автор: 7:41 секунда как сделать что бы не показало 2 а показало 1, 2;?
Привет 🖐
Также добавить счётчик, который будет foreach Match добавлять в label1.Text
Думай, как это реализовать. Подсказку дал =) Просто подсчитывай каждое успешное нахождение.
Либо можно самому разбить цифру 2 на составные. Своей опять же формулой.
@@XpucT я хочу реализовать нумерацию строк ищу любой вариант который как можно быстрее работает, спасибо. Если что-то знаете на эту тему от пишите .
@@Fioletka_YT Вам нужно посмотреть видео про for (int i =0....
ua-cam.com/video/rONfuDgqpHU/v-deo.html
Также есть видео про LINQ, где приводится хороший пример с IEnumerable:
ua-cam.com/video/gF4X3yr0nsA/v-deo.html
@@XpucT Пока в тупике. Создал два текстбокса один в котором текст во втором нумерация. Вот этот код работает крайне медленно))
Если поставить на событие текстового текстбокса код рабочий но медлительный)
countN = textBoxLesson.Text.Count(x => x == '
');
textBoxNumbers.Clear();
for (int i = 1; i x == '
')));
По скорости второй вариант меня вполне устраивает, правда я подвязан к 1м. строк ну мне этого за глаза и всегда можно добавить. Так же удивительное явление происходит в конструкторе при создании обьекта циклы работают молненосно быстро. Вам спасибо за качественный контент. Если есть что подсказать буду крайне благодарен.
Круто! По самому Regex'у все понятно, а вот с масками, как они составляются, что-то не очень ))) Я не про это видео, а про себя в целом, постоянно косячу с масками в регулярках, особенно, когда, например, надо не просто сделать маску вида (.*?), а нафигачить чуть ли не весь словарь спецсимволов регулярок(например когда ссылки выдергиваешь), вот с этим прям бЯда! Может видосик сделаете на эту тему? или только практика поможет? )))
Для этого есть как раз Dictionary и Serialization. Сниму обязательно 👍
@@XpucT Как раз изучаю )) И заранее большое спасибо!
Спасибо. Было трудно. Но я понял)))
Решил для получения опыта написать дополнительно маленькую программку, которая с API сайта Московской биржи получает инфу по ц.б., у них несколько страниц каждая отвечает за свою инфу. Вот на одной из страниц (xml - пример страницы iss.moex.com/iss/securities/SU26223RMFS6/aggregates.xml?date=2020-05-19) столкнулся с проблемой, что параметры внутри тега могут располагаться в разных местах (пока не понял из-за чего, но IE и Лис отображают в разных местах, да и в C# вроде гуляют). Так сказать на халявку прорваться с группами регулярки не получилось, долго игрался и вроде решил данную проблему, но мне кажется намудрил через чур..., ниже кусок кода нужна отловить запись где market_name="bonds":
private void btnINFO_Click(object sender, EventArgs e)
{
string line = "";
string sdate = dateSecItogo.Value.ToString("yyyy-MM-dd", CultureInfo.CurrentCulture);
string[] separator = { "
" };
string urlItogo = $@"iss.moex.com/iss/securities/{txtSECID.Text}/aggregates.xml?date={sdate}";
using (WebClient wc = new WebClient())
{
wc.Encoding = Encoding.UTF8;
//Информация по итогам торгов
line = wc.DownloadString($"{urlItogo}");
var arline = line.Split(separator, StringSplitOptions.RemoveEmptyEntries).ToList();
line = string.Join("", arline.Where(x => x.Contains("market_name=\"bonds\"")));
Match match = Regex.Match(line, "numtrades=\"(.*?)\"");
txtNumtrades.Text = match.Groups[1].Value;
match = Regex.Match(line, "volume=\"(.*?)\"");
txtVolume.Text = match.Groups[1].Value;
match = Regex.Match(line, "value=\"(.*?)\"");
txtValue.Text = match.Groups[1].Value;
}
}
Думал через json (iss.moex.com/iss/securities/SU26223RMFS6/aggregates.json?date=2020-05-19), но мне показалась там сложнее эти данные выцепить, т.к. боюсь что колонки тоже могут менять свои позиции.
Хачатур, если не сложно посмотри плиз своим опытным взглядом, может как всегда есть более простое решение, о котором я не знаю :)
На самом деле неплохо, но есть есть json, то лучше сериализацией.
Я правда пока не снимал об этом, но найти в инете можно, как всегда.
Там есть json?
@@XpucT Да, есть. Вот ссылка на json (iss.moex.com/iss/securities/SU26223RMFS6/aggregates.json?date=2020-05-19), но не понимаю как лучше выцепить данные, боюсь что колонки тоже могут менять свои позиции.
@@Akelow Короче Меня, пожалуй, никто и нигде не пишет =))
dynamic d = new JavaScriptSerializer().Deserialize(new WebClient()
.DownloadString("iss.moex.com/iss/securities/SU26223RMFS6/aggregates.json?date=2020-05-19"));
string Data(int item) => string.Join(Environment.NewLine, d["aggregates"]["data"][0][item]);
label1.Text = Data(7);
label2.Text = Data(6);
label3.Text = Data(5);
@@XpucT Спасибо тебе большое! Данный способ гораздо проще и удобнее, нужно только подробнее по-изучать его.
P.S. Как сказал великий классик А.П.Чехов - Краткость - сестра таланта!
@@Akelow 🤝
Писал в универе на Паскале задачки какие-то, а тут сайты парсить? Для меня это как машинку получить в детстве, неужели делаю что-то более, чем консольная херь, которая считает количество отрицательных нечётных цифр в числе.. Огромное спасибо за уроки, это безумие!
я с помощью C# сделал свой язык програмирования AnSy типо паскаля, для обучения
Хачатур, снимите, пожалуйста, полноценное видео про парсинг сайтов без api, на которых есть пагинация и полускрытая (например есть кусок № тел, но пока не кликнешь, весь не виден) информация, с использованием, anglesharp и htmlagilitypack.
Помотри на ExtremeCodeTV ))
@@irinaturlak по-моему там много лишнего, а у Хачатура есть шикарный скил делать всё лаконично и без потери в функционале или скорости, плюс рассказывает более просто и доходчиво, в отличии от экстремшиков, которые любят выпендриться терминами.
В шаблоне при выборе любых символов достаточно (.*)
знак ? - лишний
Бро, у меня не получилось через .*
Только через .*?
релевантно ли это для Python?
Да. Безусловно.
Но чтобы погрузиться не столько в кодовую часть, как в сами Регулярные выражения в целом, чтобы это было универсально для любого языка, обязательно к просмотру это ➜ ua-cam.com/video/9Xv3zFcxLrw/v-deo.html
@@XpucT спасибо!
Здравствуйте! Не могу справиться с элементарной вещью, стыдно, каюсь.
string s = "Мама мыла раму";
Match match = Regex.Match(s, "Mам(.*)раму");
Console.WriteLine(match.Groups[1].Value);
Т.е. пытаюсь вывести кусок текста между "мамой" и "рамой". Где я напортачила??
Добрый вечер, Женя 🖐
string s = "Мама мыла раму";
Match match = Regex.Match(s, "Мама(.*?)раму");
Console.WriteLine(match.Groups[1].Value);
@@XpucT где тут рыдающий смайл... Спасибо! Но зачем знак вопроса? Почему недостаточно звезды?
@@ЕвгенияЕвгения-о6э это разные вещи. В видео как раз говорил, что есть справка и там подробнее написано про каждый спецсимвол.
Зачем проверять наличие после запятой пробела если можно заменить запятую на запятую с пробелом и удалить двойные пробелы?
В данном уроке мы не учимся убирать запятые так эффективно, как вы предложили.
В данном уроке мы учимся в принципе Regex в C#.
@@XpucT я ему у вас и учился только что))
@@daminoshk4 тогда да, проще, как Вы написали. Но опять же главное не это, а в принципе уметь читать.
Но в любом случае 5 за внимательность 👍
Каеф👍
Рэгекс, а я до твоего видео риджекс называл))
Никогда не заменю маму на всякие там пробелы
Зачем парсить из json или xml если есть сериализация в объекты?
Дооо...
Нарисуй-ка сериализацию в рамках тех знаний, которые уже даны.
Жду.
Привет, у меня есть json ответ, в нем есть много повторяющихся значений которые мне нужно спарсить
Вот пример:
Там где "Здесь то что нужно парсить" = на каждой строке новое значение
"templateId":"Name:(Здесь то что нужно парсить)",
Как мне спарсить это и вывести в textBox Чтобы было
Akula
Ananas
Banan
Regex
То есть спаршеное значение
Сделал
string[] matchArray = new string[matchCount.Count];
for ( int i = 0;i < matchCount.Count; i++)
{
matchArray[i] = matchList.Value;
}
richTextBox1.Text = string.Join("
", matchArray);
Теперь выводит то количество сколько находится в запросе, но все они одинаковые то-есть был Banan 1 в запросе и идет Banan 15 раз через
Привет. Тебе нужно дойти до урока про LINQ.
Но если нужно прямо сейчас, то:
var list = File.ReadAllLines(json ответ).ToList();
var newlist = list.Select(x => x.Replace("\"templateId\":\"Name:(", "")).Select(x => x.Replace(")\",", ""));
MessageBox.Show(string.Join(Environment.NewLine, newlist));
@@XpucT сегодня обязательно все пройду, спасибо огромное :)
@@XpucT просмотрел видео, и другие некоторые гайды и не работает ничего(
@@ВалентинОльховский-т8ы Код, который Я дал работает. Перед тем, как отправить, проверил лично.
Привет, какой у тебя комп?
Привет 🖐
Windows 10 x64
MSI Z97-G43 Gaming
Intel Core i7-4790K @ 4.00GHz + Zalman CNPS 8900 Quiet
AMD Gigabyte Radeon R9 290 4GB
Corsair Vengeance 24GB (8GBx3) 1600MHz DDR3
KINGSTON V300 SSDNow+ (SSD)
HIPRO HPH 700W
LG TV 32" (1920x1080@60Hz)
A4tech X-738K
@@XpucT спасибо. А у меня такой :(
forums.overclockers.ru/viewtopic.php?p=16254963#p16254963
Привет. Подскажите пожалуйста почему ругается на label1? prntscr.com/nwlrza
Привет 🖐
Когда наводишь мышь, какая там ошибка?
@@XpucT The name label1 does not exist in the current context
@@zumwolfzum контрола label1 не существует.
Ты наверно пропустила уроки, потому что в один прекрасный момент у нас в проекте всегда был есть и будет label
Просто возьми Label из панели элементов и перенеси на форму.
@@XpucT спасибо. Так и сделаю
Местами не понимаю автора, рассказывает про мощный регекс, но для того чтоб отменить ввод в тextbox не использует event Argument, а идет через какие то грабли
Хачатур, я тут, кажется, нафлудил, т.к. у меня че-то ютуб глючит. Я не вижу свои комментарии спустя несколкьо секунд после публикации, хотя видно что счетчик комментариев увеличивается. Если всем они отображаются, можно почиситить лишнее)
хм. а этот не исчезает. Ютубу чем-то не понравились те комменты?
Привет 🖐
Я не успеваю прочесть комменты. Успел заметить только Первое, что понравилось, потом второе, что понравилось. Целиком не вижу, не пойму зачем UA-cam их режет. Всего успел заметить 4 коммента.
@@XpucT у меня там были ссылки на гитхаб и ещё какой-то ресурс, я пробовал и без ссылок, всё равно скрылись почему-то.
ну вот и моё д з, не знаю насколько правильно я прикрутил карту, но главное, что работает :)
github.com/ultrajeka/regex.git
Отлично 👍
Поразила скорость загрузки карты. Просто сверхбыстро!
@@XpucT спасибо
Если подумать не так уж и сложно. Да можно сделать лучше, на впринцепе не плохо
Я когда вижу эти объяснения к функциям - иду в инет за объяснениями. Лучше бы ссылку на видос показывали сразу
Наткнулся на задачу: написать регулярное выражение, с помощью которого проверяется двоичное число на делимость на 3 в десятичном формате. Насколько это сложно?
какой браузер ты используешь?
Cent Browser
ua-cam.com/video/zlLcry2IfZc/v-deo.html
5:44 можна не стерать точку а нажать ctrl+пробел
Привет! Такая проблема появилась, при загрузке разметки сайта в переменную вылетает ошибка 400 Bad Request. Сама ссылка рабочая, с браузера все замечательно открывается , уже на неделю завис проект xd. Может ты когда-то встречался с такой проблемой? В инете все советы оказались бесполезными. Вот ссылка - www.myscore.com.ua/match/df6IGWB9/#standings;over_under;overall;2.5
Привет 🖐
Сервер с защитой. Нужно брать у них API отдельно, либо искать зеркало на сайт, либо клон.
А зачем вы используете виртуальную машину? Чтобы айпишник в черные списки не закинуло при парсинге или по другой причине?
Нет, об этом говорил в Уроке 1.
Довольно часто слетает либо какой-то модуль, либо обновление целиком. Нужна возможность быстрого отката. Быстрее, чем виртуалку сбросить на точку сохранения ничего нельзя. Собственное железо к тому же не требуется перезагружать.
В стрингах код пишут только хтмл-программисты
минутка тупого юмора
Привет Хачатур джан , вот написал маленькое веб приложение , на домашку ) залил на гид хаб думаю кому нибуть пригодится github.com/lyovjan/Projects
Очень круто 👍
Пригодится, конечно, пусть учатся 👍
@@XpucT Спасибо за программку! Пригодилась для хорошего примера! Только вот новое есть... да и вот почему protected, internal... Жаль уроков новых нету (
пацы, а как тут тащить?
а то я не играл еще, вот хочу залететь попробовать
О боже доллар 64
Урок мягко говоря, от начинающего для начинающего, полезной инфы минут.
Забыл сразу спросить, а про API будет видео? Хотя бы небольшое )) Только НЕ на примере ВК пожалуйста ))) а то уже тошнит от этого ВК
Здоров Всем. Может кому пригодится нашёл сайт для быстрой Наглядной проверки регулярных выражений regex101.com/ в Test String пишите свой текст для проверки а в Regular Expression свое регулярное выражение и в поле Test String автоматом подсвечивается найденные совпадения. мне помогло
Чё теперь в семейках писать код?