Страницы: 1
RSS
Регулярное выражение меняющейся строки
 
Добрый день!
Прошу помочь с решением задачи. Имем строки вида:
50HZ, RR-LT/3, S-TRM/CS, CS-T12, MDPN-S2
50HZ, RD-LT, R-TRM/CS, T12, MDPN-S
50HZ, RN-UT/3, SIC, CS, R-TRM/CS, MDPN-S, 28INV
50HZ, RA-CT/3, R-TRM/CS, 18H-T11, MDPN-S
50HZ, RE-LT, R-TRM/CS, FT-T11, MDPN-S
50HZ, RE-S, R-TRM/CS, FT-T11, MDPN-S
50HZ, RE-UT, R-TRM/CS, MDPN-S
Требуется возвратить значение после первого тире до запятой. (UT,CT.S,LT). Представление регулярного выражения вида \-[LCUST]{1,2}(?=,|/) возвращает значения, но кроме этого туда попадает и  значение MDPN "-S". Были попытки написания регулярки вида (?<=R[A-Z]-)\w+(/\d{1})?, но данное представление не работает в среде Excel
 
Добрый.
Покажите данные в файле-примере. Вот как есть, вот как надо получить.

З.Ы.
От "первого тире до запятой" будет в том числе LT/3, UT/3 (с числами). Так?
Изменено: Пытливый - 17.05.2022 10:40:08
Кому решение нужно - тот пример и рисует.
 
Цитата
foxster_72: Регулярное выражение
ограничивает помощь. Тут и строковые отлично справятся
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
обязательно регулярка?
udf не катит?
 
Пример, во вложении
 
Цитата
написал:
обязательно регулярка?
udf не катит?
Не совсем, файл на 187000 строк. Обновляется  через день
 
Цитата
187000 строк
Тогда лучше макросом
 
Можно таким попробовать:
Скрытый текст


Выделяете исходные данные, запускаете макрос.
Изменено: Пытливый - 17.05.2022 11:04:49
Кому решение нужно - тот пример и рисует.
 
Код
Function TireComa(s)
  Dim re
  Set re = CreateObject("VBScript.RegExp"): re.Pattern = "-([^,]+),"
  If re.test(s) Then TireComa = re.Execute(s)(0).submatches(0)
End Function
Pattern = "-([^,]+),"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
просто формулой:
Код
=ЛЕВСИМВ(ПСТР(A2;ПОИСК("-";A2)+1;999);ПОИСК(",";ПСТР(A2;ПОИСК("-";A2)+1;999))-1)
 
=TRIM(MID(SUBSTITUTE(SUBSTITUTE(A2;",";"-";2);"-";REPT(" ";99));99;99))
По вопросам из тем форума, личку не читаю.
 
Ух ты!
ТС столько вариантов!
И формулы и UDF, и макросы
Куда пропал аФтор?
 
Цитата
Александр Моторин написал:
Куда пропал аФтор?
Цитата
так
foxster_72 написал:
Обновляется  через день
:D
По вопросам из тем форума, личку не читаю.
 
В PQ тогда еще вариант простейший:
Код
let
  src          = Excel.CurrentWorkbook(){[ Name = "data" ]}[Content][[Описание]],
  addParameter = Table.AddColumn ( src, "Параметр", each Text.BetweenDelimiters ( [Описание], "-", "," ) )
in
  addParameter
 
Цитата
surkenny написал:
В PQ тогда еще вариант простейший
Это для тебя простейший, а у ТС сейчас взрыв мозга  :D
 
еще вариант:
Код
=ПСТР(A2;НАЙТИ("-";A2)+1;НАЙТИ(",";A2;НАЙТИ("-";A2)+1)-(НАЙТИ("-";A2)+1))

поправьте, если не так
Изменено: artemkau88 - 18.05.2022 08:51:54
 
Цитата
написал:
Не совсем, файл на 187000 строк.
тогда регулярки тем более не катят, т.к. они тяжелее обычных стороковых Instr и Mid и встроенных функций(примеры которых есть выше). Регулярки здесь вообще лишние и только затормозят процесс, но никак не ускорят.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Регулярки здесь вообще лишние и только затормозят процесс, но никак не ускорят.
Дима, вопрос спорный, если говорить об UDF то согласен на 100, на вызове больше потеряем, а вот если все забрать в массив , обработать и выгрузить - нужно проверять. Мой вариант на функциях на примере в 187000 строк отработал почти мгновенно и у меня не супер комп.
По вопросам из тем форума, личку не читаю.
 
в элементарной задаче: извлечь из строки символы между первым тире и первой запятой после него
самописная функция будет содержать несколько строк и должна обойти по скорости выполнения регулярные выражения
но масса случаев, когда самописная функция будет содержать 15-30 строк кода, а при использовании регулярок собственно нужно внести 20-30 символов в Pattern и 3 строки кода в итоге
лично я использую регулярки,  и не заморачиваюсь особо, что из них будет быстрее, компактный и понятный код с моей точки зрения удобнее простыни, которая не факт что еще отработает хотя бы в 2 раза быстрее
Изменено: Ігор Гончаренко - 18.05.2022 11:05:46
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Дмитрий(The_Prist) Щербаков,  В свое время Андрей VG писал что регулярки быстры, так как оптимизированы до нельзя, но конечно из-за универсальности могут проигрывать простым решениям, заточенным под конкретную задачу.
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх