Нужна помощь с Regex

Jeka124

Client
Регистрация
19.09.2020
Сообщения
122
Благодарностей
3
Баллы
18
Всем привет. Есть такой текст - (63.11 - Оброблення даних, розміщення інформації на веб-вузлах і пов'язана з ними діяльність, 68.20 - Надання в оренду й експлуатацію власного чи орендованого нерухомого майна, 68.32 - Управління нерухомим майном за винагороду або на основі контракту, 82.30 - Організування конгресів і торговельних виставок, 85.59 - Інші види освіти, н. в. і. у.) нужно через regex вытащить данные таким образом чтобы строка начиналась с цифр и заканчивалась запетой. Вся проблема заключается в том, что в тексте также присутствуют запятые.
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 523
Благодарностей
1 321
Баллы
113
Всем привет. Есть такой текст - (63.11 - Оброблення даних, розміщення інформації на веб-вузлах і пов'язана з ними діяльність, 68.20 - Надання в оренду й експлуатацію власного чи орендованого нерухомого майна, 68.32 - Управління нерухомим майном за винагороду або на основі контракту, 82.30 - Організування конгресів і торговельних виставок, 85.59 - Інші види освіти, н. в. і. у.) нужно через regex вытащить данные таким образом чтобы строка начиналась с цифр и заканчивалась запетой. Вся проблема заключается в том, что в тексте также присутствуют запятые.
Покажите примерно, что должно выйти.
 

Jeka124

Client
Регистрация
19.09.2020
Сообщения
122
Благодарностей
3
Баллы
18
Покажите примерно, что должно выйти.
63.11 - Оброблення даних, розміщення інформації на веб-вузлах і пов'язана з ними діяльність
68.20 - Надання в оренду й експлуатацію власного чи орендованого нерухомого майна
82.30 - Організування конгресів і торговельних виставок
85.59 - Інші види освіти, н. в. і. у.

Можно сделать через замену, но это нужно перебрать все цифры от 0 до 9, то есть 10 кубиков, хотелось бы реализовать через regex в одно действие.
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
Время идет, а я все никак не хочу подружиться с регулярками. Предлагаю, как всегда, альтернативное решение на скорую руку.
C#:
string text = "(63.11 - Оброблення даних, розміщення інформації на веб-вузлах і пов'язана з ними діяльність, 68.20 - Надання в оренду й експлуатацію власного чи орендованого нерухомого майна, 68.32 - Управління нерухомим майном за винагороду або на основі контракту, 82.30 - Організування конгресів і торговельних виставок, 85.59 - Інші види освіти, н. в. і. у.)";
string textFormatted = string.Empty;
List<string> validStrings = new List<string>();
List<string> parts = new List<string>(text.Remove(text.Length - 1).Remove(0, 1).Split(',').ToList());
foreach(string part in parts){
    double o;
    if(double.TryParse(part.Trim().Split(' ').First().Replace(".",","), out o)){
        if(!string.IsNullOrEmpty(textFormatted))
            validStrings.Add(textFormatted.Remove(textFormatted.Length - 1));
        textFormatted = part + ",";
    }
    else{
        textFormatted += part + ",";
    }
}
validStrings.Add(textFormatted.Remove(textFormatted.Length - 1));
return string.Join("\r\n", validStrings);
73367
 
  • Спасибо
Реакции: Jeka124

Jeka124

Client
Регистрация
19.09.2020
Сообщения
122
Благодарностей
3
Баллы
18
Время идет, а я все никак не хочу подружиться с регулярками. Предлагаю, как всегда, альтернативное решение на скорую руку.
C#:
string text = "(63.11 - Оброблення даних, розміщення інформації на веб-вузлах і пов'язана з ними діяльність, 68.20 - Надання в оренду й експлуатацію власного чи орендованого нерухомого майна, 68.32 - Управління нерухомим майном за винагороду або на основі контракту, 82.30 - Організування конгресів і торговельних виставок, 85.59 - Інші види освіти, н. в. і. у.)";
string textFormatted = string.Empty;
List<string> validStrings = new List<string>();
List<string> parts = new List<string>(text.Remove(text.Length - 1).Remove(0, 1).Split(',').ToList());
foreach(string part in parts){
    double o;
    if(double.TryParse(part.Trim().Split(' ').First().Replace(".",","), out o)){
        if(!string.IsNullOrEmpty(textFormatted))
            validStrings.Add(textFormatted.Remove(textFormatted.Length - 1));
        textFormatted = part + ",";
    }
    else{
        textFormatted += part + ",";
    }
}
validStrings.Add(textFormatted.Remove(textFormatted.Length - 1));
return string.Join("\r\n", validStrings);
Посмотреть вложение 73367
Вместо текста можно вставить переменную? У вас и без регулярок получается весьма неплохо)))
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
Вместо текста можно вставить переменную? У вас и без регулярок получается весьма неплохо)))
Спасибо)
Да. Это будет выглядеть так
string text = project.Variables["имя переменной"].Value;
А вывод в необходимую переменную настройте в кубике с кодом
73370
 
  • Спасибо
Реакции: Jeka124

Jeka124

Client
Регистрация
19.09.2020
Сообщения
122
Благодарностей
3
Баллы
18
Спасибо)
Да. Это будет выглядеть так
string text = project.Variables["имя переменной"].Value;
А вывод в необходимую переменную настройте в кубике с кодом
Посмотреть вложение 73370
В каком формате указывается переменная? У меня переменная {-Variable.VuduDiyalnosti-}, указывал как есть и без фигурных скобок но кубик выдает ошибку. https://prnt.sc/10flzem
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113

backoff

Client
Регистрация
20.04.2015
Сообщения
6 052
Благодарностей
6 481
Баллы
113

Jeka124

Client
Регистрация
19.09.2020
Сообщения
122
Благодарностей
3
Баллы
18

Jeka124

Client
Регистрация
19.09.2020
Сообщения
122
Благодарностей
3
Баллы
18

backoff

Client
Регистрация
20.04.2015
Сообщения
6 052
Благодарностей
6 481
Баллы
113

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
работает, но есть нюанс, удаляет первую цифру первой строки
Вы предоставили пример со скобками. Я их и удалил аккуратно, полагая, что в переменной они есть. Теперь понимаю, что Вы так просто обрамили пример, чтобы он выделялся из основного текста.
замените 4-ую строку на эту

List<string> parts = new List<string>(text.Split(',').ToList());
 
  • Спасибо
Реакции: Jeka124

Jeka124

Client
Регистрация
19.09.2020
Сообщения
122
Благодарностей
3
Баллы
18

Jeka124

Client
Регистрация
19.09.2020
Сообщения
122
Благодарностей
3
Баллы
18
Вы предоставили пример со скобками. Я их и удалил аккуратно, полагая, что в переменной они есть. Теперь понимаю, что Вы так просто обрамили пример, чтобы он выделялся из основного текста.
замените 4-ую строку на эту

List<string> parts = new List<string>(text.Split(',').ToList());
Спасибо, все ок
 

Alexander174

Client
Регистрация
07.03.2017
Сообщения
165
Благодарностей
27
Баллы
28
И всё же с регулярками мне кажется жизнь чуточку проще.
\d+\.\d+.*?(?=,\ \d+\.\d+.|\.$)
 
  • Спасибо
Реакции: Jeka124 и Alexmd

backoff

Client
Регистрация
20.04.2015
Сообщения
6 052
Благодарностей
6 481
Баллы
113
Первая строка обрывается . Должно быть -
(63.11 - Оброблення даних, розміщення інформації на веб-вузлах і пов'язана з ними діяльність,) а выходит - (Оброблення даних,)
ну вы хоть задание то нормально напишите изначально в следующий раз

имеем такие-то данные
на выходе надо получить такое

а то пишите вот так, и где тут про скобки вообще
нужно через regex вытащить данные таким образом чтобы строка начиналась с цифр и заканчивалась запетой
 

Alexander174

Client
Регистрация
07.03.2017
Сообщения
165
Благодарностей
27
Баллы
28

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)