Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проверить регексом / 25 сообщений из 35, страница 1 из 2
26.09.2019, 16:20
    #39867419
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Строка длиной от 1 до 4 должна состоять из символов ABCD, при этом не должно быть повторов.
Регекс с таким вообще справится?
...
Рейтинг: 0 / 0
26.09.2019, 16:27
    #39867425
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Тебе в один приём надо?
...
Рейтинг: 0 / 0
26.09.2019, 16:28
    #39867426
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Повторы в произвольно порядке или подряд?
...
Рейтинг: 0 / 0
26.09.2019, 16:29
    #39867427
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
В один прием, порядок произвольный.
...
Рейтинг: 0 / 0
28.09.2019, 09:40
    #39868328
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Теоретически можно.
Нужно написать регулярку со всеми возможными значениями.

A|B|C|D|AB|AC|AD|BA|BC|BD ... и так далее
...
Рейтинг: 0 / 0
28.09.2019, 15:36
    #39868415
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
кажись получилось

Код: c#
1.
^((?<!.*A.*)A(?!.*A.*)|(?<!.*B.*)B(?!.*B.*)|(?<!.*C.*)C(?!.*C.*)|(?<!.*D.*)D(?!.*D.*)){1,4}$
...
Рейтинг: 0 / 0
29.09.2019, 22:15
    #39868756
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Shocker.Proкажись получилось

:-))) Очешуеть....

Не проще ли вот так:

Код: c#
1.
var isValid = string.Concat(str.OrderBy(c => c)) == "ABCD";
...
Рейтинг: 0 / 0
29.09.2019, 22:28
    #39868766
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
fkthatНе проще ли вот так:Твой код вообще не соответствует условию задачи, даже если забыть про требование одного регекспа
...
Рейтинг: 0 / 0
30.09.2019, 01:18
    #39868824
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Shocker.ProfkthatНе проще ли вот так:Твой код вообще не соответствует условию задачи, даже если забыть про требование одного регекспа


Почему нет? По мне так отличный вопрос на собеседование :)
...
Рейтинг: 0 / 0
30.09.2019, 03:42
    #39868848
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Antonariy,

группировка с обратной связью поможет найти повторы в произвольном порядке:

Код: c#
1.
2.
3.
4.
5.
6.
7.
string input1 = "ABCD";
string input2 = "ABCA";

string pattern = @"([ABCD]).*\1";

Console.WriteLine(Regex.IsMatch(input1, pattern)); // False
Console.WriteLine(Regex.IsMatch(input2, pattern)); // True



Ещё нужно отсеять все символы кроме ABCD. Поможет такой шаблон:

Код: c#
1.
@"([ABCD]).*\1|[^ABCD]"



Работает на строках от одного до четырёх символов.
Вроде то, что нужно?
...
Рейтинг: 0 / 0
30.09.2019, 06:44
    #39868855
Colt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
fkthat
Код: c#
1.
var isValid = string.Concat(str.OrderBy(c => c)) == "ABCD";



А сработает ли это для строк, длина которых меньше 4 (если я правильно понял условия ТС, такое допустимо)
...
Рейтинг: 0 / 0
30.09.2019, 07:03
    #39868859
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Colt
А сработает ли это для строк, длина которых меньше 4 (если я правильно понял условия ТС, такое допустимо)

Код: c#
1.
var isValid = !string.IsNullOrEmpty(str) && "ABCD".StartsWith(string.Concat(str.OrderBy(c => c)));
...
Рейтинг: 0 / 0
30.09.2019, 08:33
    #39868879
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Да, вот уж где к месту вспомнить фразу Завински про now they have two problems.
...
Рейтинг: 0 / 0
30.09.2019, 09:04
    #39868889
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
hVosttПочему нет?потому что строка от 1 до 4
hVosttПо мне так отличный вопрос на собеседование :)какой именно?
fkthat
Код: c#
1.
var isValid = !string.IsNullOrEmpty(str) && "ABCD".StartsWith(string.Concat(str.OrderBy(c => c)));

все равно не соответствует условию, ты не проверяешь что ли?

petalvik
Код: c#
1.
@"([ABCD]).*\1|[^ABCD]"

Браво. Недооценивал этот приём )
...
Рейтинг: 0 / 0
30.09.2019, 11:17
    #39868998
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Shocker.Proвсе равно не соответствует условию, ты не проверяешь что ли?

Во, блин. Может мне еще юнит-тестами покрыть все это. Я просто кинул идею, что сходу в голову пришло. Кому она по душе - пускай уже дорабатывает сам. :-)
...
Рейтинг: 0 / 0
30.09.2019, 12:01
    #39869030
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
hVostt,

а по моему, это плохой пример для собеседования
...
Рейтинг: 0 / 0
30.09.2019, 12:05
    #39869032
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
fkthatShocker.Proвсе равно не соответствует условию, ты не проверяешь что ли?

Во, блин. Может мне еще юнит-тестами покрыть все это. Я просто кинул идею, что сходу в голову пришло. Кому она по душе - пускай уже дорабатывает сам. :-)Эта идея вообще ни о чем, она не проверяет Len<4, и доработать её до нужной кондиции нельзя.
...
Рейтинг: 0 / 0
30.09.2019, 12:39
    #39869064
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Shocker.ProЭта идея вообще ни о чем, она не проверяет Len<4, и доработать её до нужной кондиции нельзя.
Вроде как всё прекрасно проверяется:
Код: c#
1.
2.
foreach(var s in new []{"ABC", "ABCD", "ABCDD"})
  Console.WriteLine("{0} {1} {2}", s, s.Length, "ABCD".StartsWith(s, StringComparison.OrdinalIgnoreCase));

Код: plaintext
1.
2.
ABC 3 True
ABCD 4 True
ABCDD 5 False
...
Рейтинг: 0 / 0
30.09.2019, 12:50
    #39869076
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Сон Веры ПавловныВроде как всё прекрасно проверяется:проверь "ABD"
...
Рейтинг: 0 / 0
30.09.2019, 12:52
    #39869079
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
В принципе, на Linq вполне реализуется в одну строку, с применением Except/Intersect и Group+Count например. Но топик-то о регулярках
...
Рейтинг: 0 / 0
30.09.2019, 13:10
    #39869096
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Shocker.Proона не проверяет Len<4, и доработать её до нужной кондиции нельзя.

Точняк. Я косяканул. Глаз замылился.

Впрочем, в реале я бы вообще не парился и написал бы тупо:

Код: c#
1.
2.
3.
4.
var valid = 
    0 < str.Length && str.Length < 5 &&  // length between 1 and 4
    str.All(c => "ABCD".Contains(c) &&   // contains only 'A', 'B', 'C', 'D'
    str.Distinct().Count() == str.Length; //  all chars are distinct



В половине случаев самый тупой способ он впоследствии самый понятный и поддерживаемый. А среднестатистический регексп, обычно, даже сам его автор на следующий день прочитать уже не может
...
Рейтинг: 0 / 0
30.09.2019, 13:32
    #39869114
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Shocker.ProhVosttПочему нет?потому что строка от 1 до 4
hVosttПо мне так отличный вопрос на собеседование :)какой именно?

Такой вопрос, а про регулярку это такой подвох :)
...
Рейтинг: 0 / 0
30.09.2019, 13:32
    #39869115
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Roman MejteshVostt,

а по моему, это плохой пример для собеседования

почему же?
...
Рейтинг: 0 / 0
30.09.2019, 14:27
    #39869166
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
hVosttRoman MejteshVostt,

а по моему, это плохой пример для собеседования

почему же?такие узкоспециализированные вопросы, которые в памяти (в уме) еще не так просто решить, это не лучший вопрос, как задание после собеседования норм, а как вопрос на собеседовании, это вообще не вариант, если только не нужен специалист по работе с текстом и regex, я бы в уме такое не решил, к примеру, но не считаю это для себя проблемой
...
Рейтинг: 0 / 0
30.09.2019, 15:55
    #39869261
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить регексом
Roman Mejtesтакие узкоспециализированные вопросы, которые в памяти (в уме) еще не так просто решить, это не лучший вопрос, как задание после собеседования норм, а как вопрос на собеседовании, это вообще не вариант, если только не нужен специалист по работе с текстом и regex, я бы в уме такое не решил, к примеру, но не считаю это для себя проблемой

всё верно, собеседование далеко не похоже на спокойную рабочую атмосферу, стресс.. всё такое.
я в корне не согласен, судить в отрицательном ключе о человеке, если он не выдал решение на задачу с подвохом. однако если таки выдал решение, особенно изобретательное, красивое и простое -- то это явный плюсек в карму :)
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проверить регексом / 25 сообщений из 35, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]