powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проверить регексом
25 сообщений из 35, страница 1 из 2
Проверить регексом
    #39867419
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строка длиной от 1 до 4 должна состоять из символов ABCD, при этом не должно быть повторов.
Регекс с таким вообще справится?
...
Рейтинг: 0 / 0
Проверить регексом
    #39867425
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе в один приём надо?
...
Рейтинг: 0 / 0
Проверить регексом
    #39867426
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторы в произвольно порядке или подряд?
...
Рейтинг: 0 / 0
Проверить регексом
    #39867427
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В один прием, порядок произвольный.
...
Рейтинг: 0 / 0
Проверить регексом
    #39868328
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Теоретически можно.
Нужно написать регулярку со всеми возможными значениями.

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

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

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

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

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


Почему нет? По мне так отличный вопрос на собеседование :)
...
Рейтинг: 0 / 0
Проверить регексом
    #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
Проверить регексом
    #39868855
Colt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat
Код: c#
1.
var isValid = string.Concat(str.OrderBy(c => c)) == "ABCD";



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

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

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

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

Во, блин. Может мне еще юнит-тестами покрыть все это. Я просто кинул идею, что сходу в голову пришло. Кому она по душе - пускай уже дорабатывает сам. :-)Эта идея вообще ни о чем, она не проверяет Len<4, и доработать её до нужной кондиции нельзя.
...
Рейтинг: 0 / 0
Проверить регексом
    #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
Проверить регексом
    #39869076
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныВроде как всё прекрасно проверяется:проверь "ABD"
...
Рейтинг: 0 / 0
Проверить регексом
    #39869079
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, на Linq вполне реализуется в одну строку, с применением Except/Intersect и Group+Count например. Но топик-то о регулярках
...
Рейтинг: 0 / 0
Проверить регексом
    #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
Проверить регексом
    #39869114
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProhVosttПочему нет?потому что строка от 1 до 4
hVosttПо мне так отличный вопрос на собеседование :)какой именно?

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

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

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

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

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

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


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