powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Использование подстановочных знаков при поиске текста..
17 сообщений из 17, страница 1 из 1
Использование подстановочных знаков при поиске текста..
    #37082497
CacheLot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Юзаю метод Find. При этом нужно создать шаблон, по которому будут найдены все цифры в тексте, перед которыми стоит в точности точка с запятой и пробел, после которых стоит или точка с запятой, или запятая или закрывающаяся квадратная скобка. Использую шаблон:
Код: plaintext
1.
.Execute(FindText:="\;^0032<[0-9]@>[\;\,\]]") = True
Но этот шаблон не отрабатывает так как хочу: а именно в тексте [1; 2; 3; 4; 5] - находит только 2 и 4??? При этом в Word пошагово находит все нужные элементы - двойку, тройку, четвёрку и пятёрку... В чём трабл подскажите уже 3-й день бьюсь не получается!
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37082602
CacheLot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CacheLot,

Сделал тестовый пример, соврешенно простой: Дан текст: XXX. Ищем в нём XX. При этом подкрашивает первые XX, а при нажатии кнопки "найти далее" - находит два икса дважды... В чём различие между методом подкрашивания и методом поиска? И как сделать чтоб в методе Файинд искал иммено все вхождения а не только первое попавшееся?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub Test()
With ActiveDocument.Content.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .MatchWildcards = True
        Do While .Execute(FindText:="XX") = True 
          w = w +  1 
        Loop
End With
MsgBox w
End Sub

При этом w=1 (а не два - как ожидалось). Так и надо или я не понял как на самом деле нужно (правильно)?
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37082933
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CacheLotСделал тестовый пример, соврешенно простой: Дан текст: XXX. Ищем в нём XX. При этом подкрашивает первые XX, а при нажатии кнопки "найти далее" - находит два икса дважды... В чём различие между методом подкрашивания и методом поиска? И как сделать чтоб в методе Файинд искал иммено все вхождения а не только первое попавшееся?
Да, вообще интересный эффект - в данном случае запись макроса не воспроизводит то же самое, чего добиваешься нажатием кнопок.
Похоже, перед следующий поиском надо переопределять Range, в котором идет поиск.
Надо подумать...


ЦЭ - тебя предупреждали, не лезь к авторам со встречными вопросами, если не можешь понять, что написано
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37082945
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CacheLot,

В общем, у меня вышло примерно так (доведенный пример из второго поста). Не знаю, насколько оптимально, но, по крайней мере, работает.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub Test()

Dim n As Range, w As Integer
Set n = ThisDocument.Content

Do
    n.Find.ClearFormatting
    n.Find.Replacement.ClearFormatting
    n.Find.MatchWildcards = True
    If Not n.Find.Execute(FindText:="XX") Then Exit Do
    w = w +  1 
    Set n = n.Characters( 2 )
    n.Collapse wdCollapseStart
Loop
MsgBox w

End Sub
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37082977
CacheLot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович ЭндрюCacheLot, из Вашего примера не очень видно
Дан текст: XXX
Но поверим на слово
ценю ваше чувство юмора))
Ципихович Эндрю...что не понятно...


Решил обойти задачу с другой стороны, так вот сейчас нужен конкретно шаблон поиска, который бы искал и находил все цифры, стоящие или после знака "[" или после последовательности ";пробел". Что то типа:
Код: plaintext
1.
2.
[\[;]^ 0032 { 0 ;}<[ 0 - 9 ]@>


но.. в шаблоне {n;m} - n>0 (строго!)

Вопрос открыт... ломаю голову и ничего неполучается..
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37082986
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CacheLot,

так натравите регулярку на документ.
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37083067
CacheLot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-dukeCacheLot,

так натравите регулярку на документ.

кроме как разделить задачу на две части - в голову ничего не приходит: сначала ищем квадратные скобки перед числами, потом проходим заново и ищем уже (точи запятой+пробелы) перед числами.. может есть более элегантное решение.. но пока что вижу конкретное ограничение (недоработку?) подсистемы "Найти и заменить" ворда..
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37083070
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CacheLot,

Чем не устраивает мое решение?
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37083110
CacheLot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProCacheLot,

Чем не устраивает мое решение?

попробую завтра уже, спасибо за ответ!)
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37083128
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CacheLot...
Решил обойти задачу с другой стороны, так вот сейчас нужен конкретно шаблон поиска, который бы искал и находил все цифры, стоящие или после знака "[" или после последовательности ";пробел" .
бред, конечно, по сравнению с RegExp... зато без "сторонних" библиотек и за один проход...
Код: plaintext
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.
Option Explicit

' найти все цифры, стоящие или после знака "[" или после последовательности ";пробел".
Sub findmeplease()
Dim i%, s$
With ThisDocument.Range.Find
    .MatchWildcards = True
    .Text = "[0-9]@"
    Do While .Execute
        .Parent.Select
        Selection.Start = Selection.Start -  2 
        s = Left(Selection.Text,  2 )
        If s = "; " Or Right(s,  1 ) = "[" Then _
            i = i +  1 
    Loop
End With
Selection.Collapse wdCollapseEnd
If i >=  5  And i <=  20  Then
    s = "й"
Else
    Select Case i Mod  10 
        Case  1 : s = "е"
        Case  2 ,  3 ,  4 : s = "я"
        Case Else: s = "й"
    End Select
End If
MsgBox "найдено " & i & " совпадени" & s, , "поиск по шаблонам '\[[0-9]@' и '(; )[0-9]@'"
End Sub
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37083696
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используйте такой шаблон для поиска
"^0032<[0-9]@>[\;\,\]]"
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37083728
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
единственное, перед "1" не должно быть пробела, а то тоже найдется
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37085292
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,
script-coding "съехали" сюда .

\b - Граница слова, т.е. позиция между концом слова и пробелом.
\B - НЕ граница слова.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Global = True
Str = "Windows FreeWind MagicWin95"
'objRegExp.Pattern = "ows\b"
objRegExp.Pattern = "\bWin"
Set objMatches = objRegExp.Execute(Str)
MsgBox objMatches.Count
'objRegExp.Pattern = "ows\B"
objRegExp.Pattern = "\BWin"
Set objMatches = objRegExp.Execute(Str)
MsgBox objMatches.Count
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37085376
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,
выкладывайте книгу с данными, кодом и описанием чего от кода хотите...
чуть не написал "... и будет Вам счастье"
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37085597
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,
наступил я на грабли: метасимволы ведут себя атипично, если паттерн содержит кириллицу :(
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Sub re_findcell()
' не отрбатывает, как ожидалось
' паттерн по метке pat1 не находит
' паттерн по метке pat2 находит трижды...
Dim re
Dim c
    Set re = CreateObject("vbscript.regexp")
    With Worksheets( 1 )
        .[a3] = "1) скукотища"
        .[a4] = "2) респектскукотища"
        .[a5] = "3) эскуэльскукотища"
    End With
    're.Global = True
    're.MultiLine = True
pat1:    re.Pattern = "\bскукотища"
pat2:    're.Pattern = "\Bскукотища"
    For Each c In Worksheets( 1 ).[a3:a5].Cells
        If re.test(c.Value) Then _
            MsgBox c.Address(, , ,  1 )
    Next c
    
    Set c = Nothing
    Set re = Nothing

End Sub
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37085906
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,

Код: plaintext
1.
2.
3.
4.
5.
s = LCase(Trim("    Бью   , бьёт   ,   1, ёТ"))
Set reg = CreateObject("vbscript.regexp")
reg.Global = True ' искать по всему тексту, если False (по-умолчанию) - будет найдено только первое совпадение
reg.Pattern = " +" '+ означает, что заменяем и два и три и четыре и более пробелов подряд
s4 = reg.Replace(s, " ")
MsgBox s4
Товарищи проверяли, как RegExp ведет себя с русской локалью .
...
Рейтинг: 0 / 0
Использование подстановочных знаков при поиске текста..
    #37086337
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,
объединением диапазонов всех рабочих листов в цикле
Код: plaintext
1.
2.
3.
Dim r as Range, w as Worksheet
For Each w in ThisWorkbook.Worksheets
   If r Is Nothing Then Set r = w.Cells Else r = Union(r, w.Cells)
Next w
только в данном случае это ни к чему, т.к. метод Replase объекта RegExp принимает в качестве прараметра строковую переменую, а содержимое ячеек книги (или листа) одним махом в строковую переменную не запихнешь.
Хочется поиграться регулярныи выражениями, экспортируй Excel в CSV, на CSV натравливай RegExp, сохраняй, импортируй обратно в Excel...
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Использование подстановочных знаков при поиске текста..
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]