Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327

Как выражения прописываются в регулярке?

08.06.2017, 13:15. Показов 1335. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте, чтобы не плодить
в коде регулярки
Visual Basic
1
2
3
4
5
6
7
8
9
 'любую цифру и запятую меняем эту же цифру и точку, то есть разделителем будет не запятая, а точка
    reg.Pattern = "0,"
    SelectionRange = Trim$(reg.Replace$(SelectionRange, "0."))
    'Debug.Print SelectionRange
 
    'любую цифру и запятую меняем эту же цифру и точку, то есть разделителем будет не запятая, а точка
    reg.Pattern = "1,"
    SelectionRange = Trim$(reg.Replace$(SelectionRange, "1."))
    'Debug.Print SelectionRange
и далее цифры 2-9 как указать, что найденную после любой цифры запятую меняем на точку, сама цифра не меняется
спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.06.2017, 13:15
Ответы с готовыми решениями:

Стеки, очереди, деки как прописываются в var и type
Стеки, очереди, деки как прописываются в var и type. срочно нужно

как работaет силки в регулярке
здраствуйте #^a*+а*$# почему етот шаблон совпадается со строкой: 34a #^(a)*+\\1*$# а ето шаблон не совпадается тоже самое строкой...

Как сделать ленивую выборку в регулярке?
Есть текст ...

16
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
12.06.2017, 07:46  [ТС]
пробую так:
Visual Basic
1
2
    reg.Pattern = "([0-9]),"
    SelectionRange = Trim$(reg.Replace$(SelectionRange, "\1."))
не получается, подскажите как правильно, спасибо
0
 Аватар для anton-sf
128 / 64 / 14
Регистрация: 29.03.2015
Сообщений: 265
12.06.2017, 12:09
Как-то туманно...

Что вам мешает все запятые сразу и один раз заменить на точки?

Visual Basic
1
SelectionRange = Trim$(Strings.Replace(SelectionRange, ",",".")
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
12.06.2017, 13:00
Что вам мешает все запятые сразу
Запятые не только разделители целой и дробной части, но и множество других вариантов применения!
Даже,например, в этом предложении!
Даже.например. в этом предложении!
0
 Аватар для anton-sf
128 / 64 / 14
Регистрация: 29.03.2015
Сообщений: 265
12.06.2017, 13:47
Вопрос не вам. Ваш ответ не несёт разъяснений.

-

Нет, всё же ваш ответ по-делу, я невнимательно смотрел условия - все запятые цифрами.

Добавлено через 6 минут
Visual Basic
1
2
3
4
5
    Dim I as Integer
    SelectionRange = Trim$(SelectionRange)
    For I = 0 To 9
        SelectionRange = Strings.Replace(SelectionRange, CStr(I) & ",",CStr(I) & ".")
    Next
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
12.06.2017, 16:20  [ТС]
эх други, решение с циклом, это понятно, когда речь идёт о числе от 0 до 9, а когда о числе состоящим из нескольких цифр, тогда как быть?
то есть в
Visual Basic
1
2
Dim reg As Object
    Set reg = CreateObject("vbscript.regexp")
замены выражений, например \1 - вообще не работают?
0
3947 / 2340 / 790
Регистрация: 02.11.2012
Сообщений: 6,220
12.06.2017, 16:41
регулярка как по мне не подходит. Т.к. условие [0-9], и мы не знаем при замене какое именно условие сработало. Если бы полностью менять то можно было бы но вам нужно вернуть число которое там стояло.
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
а когда о числе состоящим из нескольких цифр
а это не важно будет меняться только например "1," и не важно какие цифры там до и после.
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
12.06.2017, 16:55  [ТС]
Цитата Сообщение от Vlad999 Посмотреть сообщение
будет меняться только например "1," и не важно какие цифры там до и после
даром не нужно!!
0
3947 / 2340 / 790
Регистрация: 02.11.2012
Сообщений: 6,220
12.06.2017, 16:59
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
даром не нужно!!
так у вас задача такая. Или вам просто циклом не подходит?
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
12.06.2017, 17:03  [ТС]
этот код:
Visual Basic
1
2
3
4
5
6
7
8
  With SelectionRange.Find
         .Text = "([0-9]),"
         .MatchWildcards = True
        While .Execute
            .Replacement.Text = "\1."
            .Execute Replace:=wdReplaceAll
        Wend
    End With
работает как надо, только он меняет текст в Ворде, а мне нужно менять в переменной
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
12.06.2017, 17:18
Пробуй
Visual Basic
1
2
3
4
5
6
7
8
Sub pr()
    Dim t$
    t = "123,025"
    With CreateObject("vbscript.regexp")
        .Pattern = "([0-9]),"
        t = Trim$(.Replace$(t, "$1."))
    End With
End Sub
3
 Аватар для anton-sf
128 / 64 / 14
Регистрация: 29.03.2015
Сообщений: 265
12.06.2017, 20:38
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
эх други, решение с циклом, это понятно, когда речь идёт о числе от 0 до 9, а когда о числе состоящим из нескольких цифр, тогда как быть?
До цикла
"1,23; 45,67; 890,12; 3 456,78; 90 123,45; 678 910,12; 3 456 789,10"
После цикла
"1.23; 45.67; 890.12; 3 456.78; 90 123.45; 678 910.12; 3 456 789.10"

Никак не вижу проблему.
Все найденные числа с запятыми меняются на такие же с точками.
Почему вам не подходит один из самых простых методов?
У вас есть неописанные вами нюансы в тексте с цифрами?
Те же запятые являются разделителями блоков цифр?
Или запятыми выделяются разряды?
Внесите скорее ясность.
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
13.06.2017, 06:16  [ТС]
вношу ясность....
Цитата Сообщение от toiai Посмотреть сообщение
$1
- ответ строго по сабжу
вместо того что я делал:
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
\1
правда ещё не проверял как работает....
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
17.06.2017, 10:56  [ТС]
здравствуйте, дошли руки, проверил, всё окейно работает, спасибо
ещё столкнулся, строки кода:
Visual Basic
1
2
3
'|-или
    reg.Pattern = "руб |руб.|рубль|рублей|рубля"
    SelectionRange = Trim$(reg.Replace$(SelectionRange, "руб."))
"руб "
"руб."
"рубль"
"рублей"
"рубля" на мой взгляд должны меняться на "руб." но меняется на "руб.ей", что я не так делаю? спасибо
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
17.06.2017, 11:47
"руб |руб.|рубль|рублей|рубля"
"руб |руб\.|рубль|рублей|рубля"

.
Описание:

Определяет любой символ, кроме "\n" (новая строка). Чтобы определить любой символ, включая "\n", следует использовать "[\s\S]".
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
17.06.2017, 12:26  [ТС]
спасибо, работает и последнее хотел спросить
как 195 руб. 20 коп.
то есть
число пробел "руб." пробел число пробел "коп."
привести к виду - 195,20 руб.? спасибо

Добавлено через 16 минут
Цитата Сообщение от Dragokas Посмотреть сообщение
"руб |руб\.|рубль|рублей|рубля"
спасибо работает, но я почитав это бы разъяснил не как Вы, а
знаком \ экранируем специальный знак - точку

Добавлено через 16 минут
гляньте пожалуйста, так:
Visual Basic
1
2
3
4
'" 195 рублей 20 копеек" приводим к виду - " 195,20 руб."
    reg.Pattern = " (\d*) руб. (\d*) коп."
    SelectionRange = Trim$(reg.Replace$(SelectionRange, " $1,$2 руб."))
    Debug.Print SelectionRange
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
17.06.2017, 13:20
Например, так:
Visual Basic
1
2
        .Pattern = "(\d+)\s+руб(\.|ль|лей|ля)\s+(\d+)\s+(копе(ек|йка)|коп\.)"
        t = Trim$(.Replace$(t, "$1,$3 руб."))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2017, 13:20
Помогаю со студенческими работами здесь

Как посчитать все совпадения по регулярке?
Вот кусочек кода, который заходит на сайт, берет html код и парсит с него по регулярке Промокод. Проблема в том, что как только он...

Как получить совпадение из строки по регулярке в переменную?
всем привет, помогите пожалуйста начинающему ) есть такая вот регулярка "^(.*)\/author\/(.*)/", и есть строка вида...

Символ пробела или конца строки в регулярке как обозначить
Т.е. все вместе может быть либо конец строки, либо пробел. сама рега иммет такой вид: Regex.IsMatch(strIn, "a|b|c",...

Не прописываются Reference
Приветствую! В решении есть определенная библиотека классов. При попытке открыть данную dll отдельно от решения, пропадают все Reference...

Не прописываются адреса в ubuntu
Всем привет не прописываются статически адреса в ubuntu, на ней установлен webmin и он рулит там адресами sudo nano...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru