Страницы: 1
RSS
Нужно вытянуть определенный текст из строки
 
Есть текст в формате ссылок:
https://chmielna20.pl/adidas-response-cl-ftwr-white-collegiate-orange-collegiate-navy-fx7719.html
https://chmielna20.pl/buty-arkk-kanetyk-suede-w13-wind-grey-bright-blue-w-el3801-2251-w.html
https://chmielna20.pl/nike-air-zoom-type-cj2033-002.html
https://chmielna20.pl/edwin-shao-lin-hoodie-sweat-i028535-mao67-03.html

Нужно из этих ссылок вытянуть:
fx7719
el3801-2251-w
cj2033-002
i028535-mao67-03

У кого какие идеи?
Изменено: dixel - 30.10.2020 10:58:54
 
Цитата
dixel написал:
Нужно из этих ссылок вытянуть:
Только указанные 4 фрагмента?
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
да
Изменено: dixel - 30.10.2020 11:22:10 (удалить)
 
Цитата
Максим В. написал:
Только указанные 4 фрагмента?
да
 
dixel, опишите словами алгоритм, по которому будет производиться вывод информации…

Например, «отступить с конца строки 5 символов (убрать ".html") и взять …»:
  • … 10 символов
  • … всё до 2го тире
  • … всё до первой цифры
  • … разделить по тире "-" и взять 2 последних блока
  • … другое

Сейчас мне сходу по примеру алгоритм определить не удалось
Изменено: Jack Famous - 30.10.2020 11:33:53
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Код
=ЕСЛИОШИБКА(ПРОСМОТР(;-ПОИСК({"fx7719":"el3801-2251-w":"cj2033-002":"i028535-mao67-03"};A2);{"fx7719":"el3801-2251-w":"cj2033-002":"i028535-mao67-03"});"")
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Цитата
Максим В. написал:
Код ? 1=ЕСЛИОШИБКА(ПРОСМОТР(;-ПОИСК({"fx7719":"el3801-2251-w":"cj2033-002":"i028535-mao67-03"};A2);{"fx7719":"el3801-2251-w":"cj2033-002":"i028535-mao67-03"});"")
Вы в этом смысле о 4 фрагментах. Это примеры ссылок с возможными комбинациями, в файле полный список
 
Тогда объясните логику по которой нужно извлечь фрагменты.
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Цитата
dixel: Есть текст в формате ссылок … Нужно из этих ссылок вытянуть … {4 фрагмента})
Цитата
Максим В.: Только указанные 4 фрагмента?
Цитата
dixel: да
Цитата
Максим В.: {сделал решение по извлечению 4ёх указанных фрагментов из любого текста}
Цитата
dixel: Вы в этом смысле о 4 фрагментах. Это примеры ссылок с возможными комбинациями, в файле полный список
и какой, интересно ЕЩЁ смысл может быть в таком точно поставленном вопросе, как у Макса???

Цитата
dixel: {Название темы:} Нужно вытянуть определённый текст из строки
Вот и получается, что текст всё-таки не определённый и его для каждой строки ещё определить надо. Предлагайте новое название для темы
Изменено: Jack Famous - 30.10.2020 12:12:23
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Например, «отступить с конца строки 5 символов (убрать ".html") и взять …»:   • … 10 символов   • … всё до 2го тире   • … всё до первой цифры   • … разделить по тире "-" и взять 2 последних блока   • … другое
Тогда можно сделать для каждого из этих примеров свою формулу?
Алгоритм такой: 1) взять полседнее слово; 2) взять последних два слова; 3) взять последних три слова;
В файле можно будет разделить для этого алгоритма
 
Доброе время суток
Цитата
dixel написал:
Алгоритм такой: 1) взять полседнее слово; 2) взять последних два слова; 3) взять последних три слова;
Что бы это было хотя бы похоже на первое приближение к алгоритму, необходимо определить - что такое слово в этом тексте ;)
Пока никто не смог догадаться - уже откройте секрет загадки.
 
https://chmielna20.pl/zx-2k-boost-cblackcblacksand-fx9113 = fx9113
https://chmielna20.pl/buty-nike-waffle-racer-crater-ct1983-700 = ct1983-700
https://chmielna20.pl/arkk-copenhagen-scorpitex-s-e15-black-sl2004-0099-m = sl2004-0099-m

Вот алгоритм для каждого примера.
Если перефразировать, то:
брать текст до первого символа "-" с конца
брать текст до второго символа "-" с конца
брать текст до третьего символа "-" с конца
 
Цитата
dixel написал:
Вот алгоритм для каждого примера
Это не алгоритм. Для того, чтобы это стало алгоритмом нужно написать, когда нужно останавливаться в братии символа :)
Как понял. UDF на регулярках.
 
Судя по тому, что должно получиться, под словом понимается букво/цифросочетание, наименее всего похожее на слово.  :)
 
Цитата
RAN написал:
наименее всего похожее на слово
Привет, тёзка.
Каков критерий этой непохожести? Если выполняется это и это, то это максимальная непохожесть, а если нет, то похоже на слово. Так вот что это, Берримор, это и это?
 
Цитата
dixel написал:
Тогда можно сделать для каждого из этих примеров свою формулу?Алгоритм такой: 1) взять полседнее слово; 2) взять последних два слова; 3) взять последних три слова;В файле можно будет разделить для этого алгоритма
Непонятное описание задачи. Но, на сколько я понял, Вы хотите вручную проставлять количество слов, которое нужно оставить? Если да, то подойдет следующая формула с добавлением промежуточного столбца с указанием количества слов:
Код
=ПСТР(ЛЕВСИМВ(A2;НАЙТИ(".";A2;НАЙТИ(".";A2)+1)-1);ПОИСК("\";ПОДСТАВИТЬ(A2;"-";"\";ДЛСТР(A2)-ДЛСТР(ПОДСТАВИТЬ(A2;"-";""))-($B2-1)))+1;99)
Нет ничего сложнее поиска простого решения.
 
dixel, написал
Цитата
Вот алгоритм для каждого примера.
Если перефразировать, то:
брать текст до первого символа "-" с конца
брать текст до второго символа "-" с конца
брать текст до третьего символа "-" с конца
UDF, меняете j для ваших условий, например =iText(A2;3)
Код
Function iText(cell As String, j As Integer) As String
Dim mo As Object
Dim n As Integer
   With CreateObject("VBScript.RegExp")
     .Global = True
     .IgnoreCase = True
     .Pattern = "[^-]+"
    If .Test(cell) Then
      Set mo = .Execute(cell)
      For n = mo.Count - j To mo.Count - 1
        iText = iText & mo(n) & "-"
      Next
        iText = Left(iText, Len(iText) - 6)
    End If
   End With
End Function
 
Эх, коллеги, похоже никто не откроет тайну заветного слова :)   И тёзка молчок, и ТС туда сюда....
Изменено: Андрей VG - 30.10.2020 17:44:54
 
Цитата
Jykermann написал:
Если да, то подойдет следующая формула
спасибо, с вашей доработкой получилось решить задачу
 

без дополнительных указаний)

число 21 в маске ограничивает максимальную длину вытянутых данных

без ограничений по длине код из єтой ссылки
https://chmielna20.pl/buty-arkk-kanetyk-suede-w13-wind-grey-bright-blue-w-el3801-2251-w.html

доставал такую часть: w13-wind-grey-bright-blue-w-el3801-2251-w

Код
Function LastAbraCadabra$(s$)
  Dim re, ms
  Set re = CreateObject("VBScript.RegExp")
  re.Pattern = "-[a-zA-z]+-(?![a-zA-z]+-)([^.]{3,21})\.html"
  If re.test(s) Then
    LastAbraCadabra = re.Execute(s)(0).submatches(0)
  End If
End Function

Изменено: Ігор Гончаренко - 30.10.2020 19:11:44
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх