Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
6 / 6 / 3
Регистрация: 12.03.2014
Сообщений: 341
1

Замена текста по регулярному выражению (Макрос для Word)

29.06.2017, 22:34. Показов 3919. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В регулярках новичок.
В документе имеются следующие строки:
[[QWE1|Текст 1]]
[[DS3f|Текст 2]]
[[f7j1|Текст 3]]
Их необходимо найти и заменить гипперссылкой (источник для замены - отдельная история).
Написал макрос, надеясь, что смогу для начала текст подменить, но что-то пошло не так.
Visual Basic
1
2
3
4
5
6
7
Dim regExp As Object
Set regExp = CreateObject("vbscript.regexp")
With regExp
    .Pattern = "\[\[+(.*)+\]\]"
    .Global = True
    Selection.Text = .Replace(Selection.Text, "==> LinkIsHere")
End With
Пытался в паттерне учесть вертикальную черту, но тесты в онлайн сервисах "говорят", что я ничего в этом не понимаю...
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2017, 22:34
Ответы с готовыми решениями:

Поиск замена по регулярному выражению в word
Добрый день. Пишу макрос для автоматической замены и расстановки меток. Требуется следующее: 1)...

Замена текста по регулярному выражению
В файле имеется ряд строк, среди которых есть следующая строка: starts3d4s4end Необходимо найти...

Ищу программу для поиска текста в файлах по регулярному выражению
Привет! Я обрадовался, когда, как оказалось, есть такая функция в Notepad++ . Но разочарования...

Замена по регулярному выражению онлайн
Здравствуйте! Подскажите есть ли онлайн сервисы в которых возможно производить замену в исходном...

11
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
29.06.2017, 22:45 2
Тогда, может, как oleg526, путём поиска-замены лучше сделать: (тема Выполнить замену слова в выделенных фрагментах текста)?
1
6 / 6 / 3
Регистрация: 12.03.2014
Сообщений: 341
29.06.2017, 23:27  [ТС] 3
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Тогда, может, как oleg526, путём поиска-замены лучше сделать: (тема Выполнить замену слова в выделенных фрагментах текста)?
Извините. Не знаю, как принято у разработчиков макросов на VBA, но выглядит такой пример для меня не очень
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
30.06.2017, 08:20 4
Bolbine84455, напишите более подробный 1 пример, что было, и что в результате должно получиться.
1
6 / 6 / 3
Регистрация: 12.03.2014
Сообщений: 341
30.06.2017, 21:22  [ТС] 5
Цитата Сообщение от Dragokas Посмотреть сообщение
Bolbine84455, напишите более подробный 1 пример, что было, и что в результате должно получиться.
Входные данные.docx
Выходные данные.docx
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
30.06.2017, 21:47 6
Bolbine84455, как то всё сильно сложно. Вы можете просто написать две строки - исходная, конечная?
1
6 / 6 / 3
Регистрация: 12.03.2014
Сообщений: 341
30.06.2017, 21:57  [ТС] 7
Цитата Сообщение от Dragokas Посмотреть сообщение
Bolbine84455, как то всё сильно сложно. Вы можете просто написать две строки - исходная, конечная?
Исходная:
[[DF45|Ссылка 1]]
Конечная:
Ссылка 1
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
30.06.2017, 22:27 8
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Explicit
 
Private Sub Form_Load()
    Dim regExp As Object
    Set regExp = CreateObject("vbscript.regexp")
    
    Dim sText As String
    sText = "[[DF45|Ссылка 1]] [[DF46|Ссылка 2]]" & vbCrLf & _
        "[[DF47|Ссылка 3]]"
        
    With regExp
        .Pattern = "\[\[(\w+)\|([A-Za-zА-Яа-я0-9_ ]+)\]\]"
        .Global = True
        .MultiLine = True
        Debug.Print .Replace(sText, "[URL=""http://myservice.ru/linkId?id=$1""]$2[/URL]")
    End With
End Sub
Добавлено через 10 минут
Ну или так, более универсальней:
Visual Basic
1
.Pattern = "\[\[(\w+)\|([^\]]+)\]\]"
2
6 / 6 / 3
Регистрация: 12.03.2014
Сообщений: 341
01.07.2017, 19:34  [ТС] 9
За скрипт спасибо. Как в самом документе менять значение?
Макрос запускаю с содержимым этой функции, но никаких изменений не вижу
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
01.07.2017, 19:42 10
Цитата Сообщение от Dragokas Посмотреть сообщение
Debug.Print
пишет в консоль отладки.

Поменяйте на нужное.
2
6 / 6 / 3
Регистрация: 12.03.2014
Сообщений: 341
01.07.2017, 21:19  [ТС] 11
Цитата Сообщение от Dragokas Посмотреть сообщение
пишет в консоль отладки.
Проблема в том, что мне надо заменять старое значение на новое.
Я взял текст и заменил его. Я получил результат в переменной, но содержимое документа как поменять не знаю
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim sel As Object
Dim selText As String
Dim i As Integer
 
Set sel = ActiveDocument.Sections(1)
selText = sel.Range.Text
 
Dim regExp As Object
Set regExp = CreateObject("vbscript.regexp")
   
Dim res As String
   
With regExp
    .Pattern = "\[\[(\w+)\|([^\]]+)\]\]"
    .Global = True
    .MultiLine = True
    selText = .Replace(selText, "[URL=""http://myservice.ru/linkId?id=$1""]$2[/URL]")
End With
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
01.07.2017, 21:33 12
Лучший ответ Сообщение было отмечено Bolbine84455 как решение

Решение

Visual Basic
1
sel.Range.Text = .Replace(selText, "[URL=""http://myservice.ru/linkId?id=$1""]$2[/URL]")
или так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim selText As String
Dim RA as Range
 
set RA = ActiveDocument.Sections(1).Range
selText = RA.text
 
Dim regExp As Object
Set regExp = CreateObject("vbscript.regexp")
  
With regExp
    .Pattern = "\[\[(\w+)\|([^\]]+)\]\]"
    .Global = True
    .MultiLine = True
    RA.text = .Replace(selText, "[URL=""http://myservice.ru/linkId?id=$1""]$2[/URL]")
End With
 
set RA = nothing
set regExp = nothing
2
01.07.2017, 21:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2017, 21:33
Помогаю со студенческими работами здесь

Замена слов на кириллице по регулярному выражению
Здравствуйте, помогите, пожалуйста. Имеется слово на кириллице: привет Имеется входной текст:...

Замена в тексте по регулярному выражению с использованием Unicode
Вариант 1: UnicodeString reg_replace(UnicodeString content_p, UnicodeString pattern_p,...

Замена строки по регулярному выражению во множестве файлов
Нужно написать скриптик, который бы заменял во всех файлах в папке и подпапках (или хотя бы в...

Поиск и замена по регулярному выражению с функцией в параметре замены
Пытаюсь создать функцию для поиска и замены строки в base64 кодированных частях контента страниц и...

Функция для поиска по регулярному выражению
Здорова господа! Нужно написать свою собственную функцию для поиска по регулярному выражению. ...

Макрос для форматирования текста word
как написать макрос, который будет переходить по абзацам текста и при этом если абзац в стиле...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru