Замена с помощью регулярного выражения

Автор Strannik61, 2 ноября 2016, 11:35

0 Пользователи и 1 гость просматривают эту тему.

Strannik61

Здравствуйте коллеги!
Возникла проблема. С помощью макроса создаются файлы и папки.
Имя файла и папки генерируются из краткого описания.
Проблема в том, что в описании могут быть любые символы, в том числе ' " ! , <> и т.д.
Подскажите как с помощью регулярного выражения оставить только буквенно-цифровой текст плюс пробелы.
С несчастью я не силён в регулярках.
На входе переменная oURL=ConvertToURL(oNameDoc)

где oNameDoc и есть вводимый пользователем текст.

rami

Цитата: Strannik61 от  2 ноября 2016, 09:35Подскажите как с помощью регулярного выражения оставить только буквенно-цифровой текст плюс пробелы.
Убрать не нужное, например: '|<|>|, уберёт четыре вида символов (апостроф, больше, меньше или запятую. Вертикальная черта означает "или").

Если нужно добавить ещё символов, разделять их вертикальной чертой. Некоторые символы надо экранировать обратным слэшем.

Заменить на "пусто".

Установить "птичку" регулярные выражения. Если в макросе, то разрешить.

Strannik61

А в макросе это как выглядит? Хотел оставить только цифры, буквы, пробел и точку.
Вот так не хочет работать oReplace = oNameDoc
oReplace.SearchString = "[[:alpha:][:digit:] .]*"
oReplace.ReplaceString = "&"
oReplace.SearchRegularExpression=True
oNameDoc = replaceAll(oReplace)

mikekaganski

С уважением,
Михаил Каганский

rami

#4
Цитата: Strannik61 от  2 ноября 2016, 10:20А в макросе это как выглядит? Хотел оставить только цифры, буквы, пробел и точку.
Sub Main
f=Array("'","<",">",",","!","?")   'символы которые нужно удалить
For i=0 To UBound(f)
Do
n=InStr(oNameDoc,f(i))
If n>0 Then mid(oNameDoc,n,1,"")
Loop While n>0
Next
'после выхода из цикла переменная oNameDoc будет очищена от не нужных символов
End Sub

Strannik61

rami - Спасибо. Но осталась проблема. Таким образом не удаляются двойные кавычки.
С помощью экранирования тоже не получилось.
Подскажите пожалуйста как их удалять?
Заранее спасибо.
P.S. Мне поэтому и хотелось с помощью регулярок, чтобы всё лишнее убрать. Жаль не получилось.

rami

Цитата: Strannik61 от  3 ноября 2016, 16:06Но осталась проблема. Таким образом не удаляются двойные кавычки.
С помощью экранирования тоже не получилось.
Удаляются. Экранировать двойную кавычку надо такой же двойной кавычкой — будет выглядеть как четыре двойных кавычек подряд
f=Array("""","<",">",",","!","?")   'символы которые нужно удалить
а не три, как многие думают ;D

Strannik61

Спасибо rami! А я пытался экранировать по привычке через backslash
И, конечно, не заработало. :beer: