Форум программистов, компьютерный форум, киберфорум
MS Office Word
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 06.06.2018
Сообщений: 3
1

Поиск слов с точно заданными окончаниями

30.01.2019, 12:38. Показов 2122. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Помогите, пожалуйста, правильно сформулировать запрос в поле "Найти" (используются подстановочные знаки).
Дано: существует текст с именами в разных вариациях (остановимся на примере с Анна и Антон) — аня, аней, аннушкой, анютка, антон, антошке, анюткой. Все имена с маленькой буквы, которые путем поиска и замены будут заменены словами с заглавной буквы. Поиск должен сработать только на производные имени Анна.
Что сделано: задан следующий формат — <ан([е|ей|и|ю|я|ка|ки|ку|кой|ке|ька|ьки|ьку|ькой|ьке|ютка|ютки|ютку|юткой|ютке|нушка| нушки|нушку|нушкой|нушке|]{1;5}> в строке "Найти", в строке "Заменить на" — Ан\1.
Что происходит: Замена идет не только в производных от Анны, но и от Антона, а еще и в слове анкета.

То есть мне нужно, чтобы при вставке в строке поиска "ька" нашлись слова анька, но не анкьа, как это может произойти сейчас.

P.S. Решение нужно типовое, поскольку у меня имеется список из полутысячи имен (на данный момент), по которым будет проводиться работа. Эта строка — одна из многих в макросе. На полных именах, например, Валерий, Александр и т.п. проблем нет, поскольку близкие им отсутствуют, трудности именно с подобными Анне.

Заранее спасибо за помощь.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2019, 12:38
Ответы с готовыми решениями:

Поиск слов с окончаниями и без
Пишу например шаблон &lt;ответ@&gt; либо &lt;ответ{1;10}&gt;. Находятся такие слова, как &quot;ответы&quot;,...

Замена слов с разными окончаниями
Добрый день! Нужна помощь по экселю. Значит есть несколько ячеек вида: итальянская кухня рецепты...

Подсчитать количество слов по группам с различными окончаниями.
Прошу прощению за вторжение в чужую тему,но у меня вопросец: А как сделать так чтобы программа...

Переделать программу через процедуры. Поиск количества слов с тремя заданными буквами
uses crt; var s,sl,sn: string; i,j,k,ks: integer; begin write('s='); readln(s); s:=s+' ';...

4
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
30.01.2019, 16:43 2
Цитата Сообщение от Lelishna Посмотреть сообщение
<ан([е|ей|и|ю|я|ка|ки|ку|кой|ке|ька...
Это Вы сами такой формат придумали, Поиск Ворда функционалом "|" не обладает. В квадратных скобках - просто список символов. Иначе бы оно без {1;5} должно работать, не так ли?
Я бы делал в VBA - поиск по <ан*> и дальше анализ c помощью RegExp, в котором функционал "|" есть.
0
0 / 0 / 0
Регистрация: 06.06.2018
Сообщений: 3
30.01.2019, 17:08  [ТС] 3
Иначе бы оно без {1;5} должно работать, не так ли?
Без {1;5} работает только с одной буквой — аня.
Я бы делал в VBA - поиск по <ан*> и дальше анализ c помощью RegExp, в котором функционал "|" есть.
К сожалению, я в VBA мало что понимаю. Мне сделали работающий макрос, который я далее размножаю под мои задачи. Увы, на большее меня не хватает.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Dim FRC As New Collection
Dim FR, item As Variant
 
FRC.Add Array(True, "<ан([е|ей|и|ю|я|ка|ки|ку|кой|ке|ька|ьки|ьку|ькой|ьке|ютка|ютки|ютку|юткой|ютке|нушка|нушки|нушку|нушкой|нушке|]{1;5})>", "Ан\1")
 
With Selection.Find
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
 
For Each item In FRC
Selection.HomeKey Unit:=wdStory
With Selection.Find
.MatchWildcards = item(0)
.Text = item(1)
.Replacement.Text = item(2)
.Execute Replace:=wdReplaceAll
End With
Next item
 
MsgBox ("Готово!")
End Sub
0
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
01.02.2019, 21:14 4
Лучший ответ Сообщение было отмечено Lelishna как решение

Решение

Цитата Сообщение от Lelishna Посмотреть сообщение
Мне сделали работающий макрос
Если бы он был работающий (с этой конкретной заменой), Вы бы сюда не обратились Вам его за деньги сделали, что ли, поэтому Вы сюда обратились, а не к автору?
Этот макрос предполагает, что Вы добавите несколько строк типа
4 FRC.Add ...
и макрос произведет несколько замен. Вы этим пользуетесь? Просто если объем таких данных большой, лучше не зашивать их в код, а формировать в таблице Word или в таблице Excel или в текстовом файле, а макрос чтобы брал данные оттуда.
Конкретно к этому коду. Чтобы перебрать варианты, записанные в квадратных скобках с разделителем "|", можно дополнить макрос так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Sub Le()
Dim FRC As New Collection
Dim FR, item As Variant, a&, b&, y
 
  FRC.Add Array(True, "<ан([е|ей|и|ю|я|ка|ки|ку|кой|ке|ька|ьки|ьку|ькой|ьке|ютка|ютки|ютку|юткой|ютке|нушка|нушки|нушку|нушкой|нушке|])>", "Ан\1")
 
  With Selection.Find
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
  End With
 
  For Each item In FRC
    Selection.HomeKey Unit:=wdStory
    With Selection.Find
      .MatchWildcards = item(0)
      .Replacement.Text = item(2)
      If item(1) Like "*[[]*|*[]]*" Then
        a = InStr(1, item(1), "[")
        b = InStr(a, item(1), "]")
        For Each y In Split(Mid$(item(1), a + 1, b - a - 1), "|")
          If Len(y) Then
            .Execute FindText:=Left$(item(1), a - 1) & y & Mid$(item(1), b + 1), Replace:=wdReplaceAll
          End If
        Next
      Else
        .Execute FindText:=item(1), Replace:=wdReplaceAll
      End If
    End With
  Next item
 
  MsgBox ("Готово!")
End Sub
1
0 / 0 / 0
Регистрация: 06.06.2018
Сообщений: 3
02.02.2019, 14:54  [ТС] 5
Огромнейшее вам спасибо!
Если бы он был работающий (с этой конкретной заменой), Вы бы сюда не обратились
Он работает без этой конкретной замены с использованием "|", вернее, он и с этим знаком работает, но не так, как надо. В строках, где его нет — все правильно.
но Вам его за деньги сделали, что ли, поэтому Вы сюда обратились, а не к автору?
Нет, мне его сделали не за деньги, но этот человек сильно занят, я не стала его напрягать улучшениями, ведь без них макрос работает, претензий нет. В крайнем случае, перетопталась бы, работала же без этого. Решила, что допустила где-то ошибку в постановке, поэтому спросила здесь, на форуме. Все-таки тут специалисты, съевшие на макросах собаку, а ему бы пришлось заново разбираться во всем, поскольку профиль не его, да и прошло уже достаточно много времени. И вы мне помогли, за что вам еще раз большое спасибо.
Задачи, которые я озвучивала изначально, выполнялись, но человек ведь всегда желает чего-то большего, вот я и дополняла его другими задачами, насколько понимала, конечно. Первичный макрос разросся уже до 5 штук.
Этот макрос предполагает, что Вы добавите несколько строк типа
4 FRC.Add ...
и макрос произведет несколько замен. Вы этим пользуетесь?
Совершенно верно. Это и было основной просьбой для создания макроса — чтобы мне сделали шаблон, который я потом могла бы спокойно дополнять самостоятельно, не ломая голову, куда и что вставлять.
Просто если объем таких данных большой, лучше не зашивать их в код, а формировать в таблице Word или в таблице Excel или в текстовом файле, а макрос чтобы брал данные оттуда.
Как я написала выше, макросов уже 5 штук по разным типам замен, потому что содержимое основного несколько специфично, чтобы использовать его регулярно, — там идет вставка отсутствующей, в принципе, пунктуации в тексте, остальные же — как в примере — замена строчной на заглавную с учетом окончаний. Максимальное количество срок в одном из них пока 600 с копейками, но теперь увеличится точно, а в общей сложности, наверное, около двух тысяч. Я бы с удовольствием сделала так, как вы сказали, но не знаю как. Попробую поискать решение. Наверное, оно не очень сложное и есть на просторах интернета. Спасибо за подсказку.
0
02.02.2019, 14:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2019, 14:54
Помогаю со студенческими работами здесь

Найти количество слов с заданными символами
Вечер добрый! Надо найти количество слов в строке с заданными 3 символами Код который у меня...

Поиск слов по маске в строке, их удаление, сортировка оставшихся слов
Доброго времени суток. Помогите, пожалуйста, реализовать задачу. нужно из текстового файла считать...

Поиск определенных слов в ТХТ файле, и запись этих слов (если найдено) в отдельный файл
К примеру, есть файл &quot;Text.txt&quot;. В нем есть 1000 строк. Если какая-то строка = привет, то echo...

Поиск расстояния между заданными символами
Мне нужна найти ростояния n - символов в слове. Например есть текст: Человек ек мак екіі. Если ми...


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

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