Страницы: 1 2 След.
RSS
Как удалить хэштеги из текста
 
Имеем столбец с текстом в ячейках которого в некоторых есть текст с хэштегами #один #два #три
хэштеги могут стоять в любом месте текста или вовсе отсутствовать.

Как удалить хэштеги из текста для эксель?
Как можно удалить хэштеги запросом в SQL?

Профи, выручайте ...
 
Цитата
puzin написал: Имеем столбец с текстом
Где он, этот столбец?
 
Однако... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Цитата
puzin написал: или вовсе отсутствовать.
Но удалить всё равно надо? :)
 
Вот файлик для тестов
По сути нужно удалить символы между решеткой и пробелом
Изменено: puzin - 09.05.2016 08:57:28
 
Как-то так
Код
Sub tt()
    Dim arr(), i As Long, Rng As Range
    Set Rng = Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row)
    arr = Rng
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "#.+?( |$)"
        For i = 1 To UBound(arr)
            arr(i, 1) = .Replace(arr(i, 1), "")
        Next
    End With
    Rng = arr
End Sub

 
Без Rng нельзя?
Код
arr= Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value
...
Range("A2").Resize(UBound(arr),1).Value=arr
 
vikttur, можно, но мне так привычнее. А чем плох этот способ, вроде проблем с ним не было?
 
Может, мой вариант хуже... :)
Но мне привычнее напрямую. Переменных меньше.

Зубры, ау! Подсказывайте.
 
Зато диапазон вычисляется только один раз  :D
 
Во! Это плюс.
 
Кстати, лучше дополнять удаление тегов, удалением лишних пробелов - могут возникать
 
Я тоже всегда пишу как vikttur,
Где-то читал, что вводить переменную имеет смысл если затем используете ее более двух раз.
Действительно, зачем в этом примере Rng?
Такая-же история с блоком With...End With. Если вложенный в него объект не используется более двух раз, то то-же смысл теряется.
Согласие есть продукт при полном непротивлении сторон
 
Sanja, так я ж своего мнения никому не навязываю. И, кстати, более двух или два и более  ;)? Потому что, по логике - второй вариант
 
Да я то-же не навязываю. Спросили - ответил.
Цитата
МВТ написал: И, кстати, более двух или два и более
Именно что БОЛЕЕ ДВУХ. Почему - не знаю. Что-то про использование памяти писали
Согласие есть продукт при полном непротивлении сторон
 
Sanja, не буду спорить с профессионалом - в теории позорно слаб, как и все самоучки. На самом деле, думаю, что в реальности заметить разницу между двумя этими способами будет невозможно. Хотя вопрос получился интересный, даже забылась первоначальная тема и отсутствие ТС в глаза не бросается  :D
 
Цитата
Sanja написал:
Такая-же история с блоком With...End With
А вот тут несогласен: даже при однократном упоминании внутри блока можно написать кучу свойств объекта, начиная ввод с точки ))
Например, для ячейки: шрифт, его размер, цвет, выравнивание, заливка...
 
Всем спасибо, в экселе удаляет, а как можно удалить хэштеги запросом в SQL?

или MySQL нет операций модификации строк с помощью регулярных выражений и это не возможно?
 
МВТ, использовал этот вариант и не много поторопился, на тестовом файле работает на боевом нет.

Файлик для обработки, там 58К строк, но после обработки макросом остались 13К строк с тегами и выдает ошибка 400
Нужна более полная версия, исправить двойные пробелы, учесть что может быть перенос строки в место пробела или просто решетка может стоять последним символом.
Прошу внести дополнения.

Вот файлик https://yadi.sk/d/NaTjg8RRraCsT
Изменено: puzin - 09.05.2016 12:16:40
 
Цитата
puzin написал: Прошу внести дополнения.
Так в чем проблема? Основа сделана, поиграться с паттерном и свойствами регулярки несложно. А убрать лишние пробелы - вообще не сложно.  Изучайте, экспериментируйте...
 
puzin, не нужно отделять каждое предложение пустой строкой
 
В общем, проблема у Вас на строке 48267. Если удалить из строки участок "=========================\", макрос срабатывает. Как вариант обхода проблемы, добавить в код On Error Resume Next, но тогда эта строка неправильно обрабатывается. Что конкретно не нравится регулярке, мне не понятно. Если у кого-то естьмысли по этому поводу, с радостью выслушаю
UPD если обрабатывать одну эту строку, обрабатывает, почему-то, правильно
Изменено: МВТ - 09.05.2016 13:38:38
 
МВТ,спасибо

Удалил строку 48267, ошибки нет, только не могу понять как сюда еще добавить перенос строки или пробел .Pattern = "#.+?( |$)"
я видимо совсем не спец в регулярных вырожениях
если не сложно подскажите
 
Так попробуйте, расскажите
Код
Sub tt()
    Dim arr(), i As Long, Rng As Range
    Set Rng = Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row)
    arr = Rng
    On Error Resume Next
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "#.*?( |$)"
        .MultiLine = True
        For i = 1 To UBound(arr)
            arr(i, 1) = WorksheetFunction.Trim(.Replace(arr(i, 1), ""))
        Next
    End With
    Sheets("лист1").Range("A1").Resize(UBound(arr)) = arr
End Sub

 
Цитата
puzin написал:  а как можно удалить хэштеги запросом в SQL?
Так можно.Через regex будет дольше.
Код
SMysql="UPDATE SomeTable SET art = REPLACE(art , '#' , '' ) WHERE POSITION( '#' IN art ) >0;"
MSSQLsql="UPDATE SomeTable SET art = REPLACE(art , '#' , '' ) WHERE CHARINDEX('#', art) > 0;"
 
МВТ, работает
но 5к строк с хэштегами так и остались, т.е не удаляет если например такой текст в ячейке
Цитата
#Агрыз
Продаю бла бла
т.е когда нет пробела и текст после хэштега через перенос строки
 
Doober, по данному запросу только решетки и удалил, нужно хэштеги целиком
 
puzin, выберите ячейки, которые не обработались, рыться в 60к строк желания нет
 
Забейте в гугл mysql regex replace,результаты поиска есть.
 
МВТ, вот сто строк в которых не удалились хэштеги
Страницы: 1 2 След.
Наверх