Regular Expressions - Lab, 03. Match Dates
Здравейте,
Може ли някой да ми каже защо на тази задача, когато подам регулярния израз по този начин
\b(?<day>\d{2})([-.\/])(?<month>[A-Z][a-z]{2})\2(?<year>\d{4})\b
не работи, а когато махна имената на групите и го подам по този начин
\b(\d{2})([-.\/])([A-Z][a-z]{2})\2(\d{4})\b
тогава работи?
Примера, който е даден във файла със задачата е написан с имената на групите, като го пусна в https://regex101.com също работи, а когато е имплементиран в кода на програмата, не работи и не хваща нищо.
Ползвам последната версия на Visual Studio ако това има значение.
Линк към задачата в judge: https://judge.softuni.bg/Contests/1667/Regular-Expressions-Lab
Линк към моя код на задачата: https://github.com/stefism/Projects/blob/master/02-C%23Fundamentals-May2019/31-RegularException/03-MatchDates/Program.cs
Благоря предварително за съдействието.
Здравей,
Благодаря за отговора.
Да, така стана, само не разбрах, защо в сайта regex101 моя израз работи и ги хваща, а в кода не?!
В същото време, ако поставя твоя израз с единицата в регекса, не хваща нищо! Нали уж каквото било на regex101 - само копи-пейст и готово? Някаква разлика в обработването на низа ли има в C#, не схващам?
Първоначално си мислех, че наименованите групи могат да се достъпват само по име, но изглежда, че в C# се нареждат след групите без име. Ето и 2 примера:
1. https://stackoverflow.com/questions/4275425/c-sharp-regexes-named-and-numbered-capturing-groups
Prints
True
, it appears unnamed capturing groups are numbered starting with1
, and then named capturing groups are assigned numbers afterwords.2. Ако искаме да мачнем: Apr.16.2017_jan_07_2019
var regex = new Regex(@"\b(?<month>[A-Z][a-z]{2})([-.\/])(?<day>\d{2})\1(?<year>\d{4})_([a-z]+)_(?<someOtherGroup>[0-9]+)_([0-9]+)\b");
1 група, 2 група, 3 група, 4 група, 5 група, 6 група, 7 група
Screenshot VS: https://imgur.com/a/d5O1043
Решение: https://pastebin.com/e2LkUC6q
(В regex101 \1 трябва да е \2)
Мерси!
Трябва да пробвам, има един бутон generate code в regex101. Там може да прави правилно кода за C# и от там да го копирам.