|   |   | 
| 
 | Нужна помощь в использовании регулярных выражений | ☑ | ||
|---|---|---|---|---|
| 0
    
        Андроны едут 17.05.21✎ 13:59 | 
        Как помощью регулярных выражений преобразовать строку вида "ТабНомер = 123, Фио = Иванов Иван Иванович, Оклад = 100000" в тело post-запроса.
 То есть получить: Данные = "{ | ""ТабНомер"": 123, | ""Фио"": ""Иванов Иван Иванович"", | ""Оклад"": 100000 | }"; | |||
| 1
    
        pechkin 17.05.21✎ 14:02 | 
        но зачем рег выражения?     | |||
| 2
    
        Андроны едут 17.05.21✎ 14:08 | 
        Понятно, что можно кодом. Но хочется. Сам к сожалению своего преклонного возраста осваиваю новое для себя с трудом.     | |||
| 3
    
        brainguard 17.05.21✎ 14:11 | 
        (0) СтрЗаменить плюс фигурные скобки в начало и конец     | |||
| 4
    
        brainguard 17.05.21✎ 14:13 | 
        (3) А, нет. Еще кавычки в Фио     | |||
| 5
    
        Андроны едут 17.05.21✎ 14:14 | 
        (3) одна из проблем - числовые поля нужно показать как есть,  а строковые заключить в двойные кавычки     | |||
| 6
    
        brainguard 17.05.21✎ 14:16 | 
        (5) Все равно стрзаменть, но несколько извращено
 Фио= заменить на "Фио":" ,Оклад= заменить на ","Оклад": | |||
| 7
    
        Андроны едут 17.05.21✎ 14:18 | 
        нет заранее неизвестны имена реквизитов     | |||
| 8
    
        acht 17.05.21✎ 14:18 | 
        (6) Да чо уж там
 СтрЗаменить(Строка, "ТабНомер = 123, Фио = Иванов Иван Иванович, Оклад = 100000", "{ | ""ТабНомер"": 123, | ""Фио"": ""Иванов Иван Иванович"", | ""Оклад"": 100000 | }"); | |||
| 9
    
        brainguard 17.05.21✎ 14:18 | 
        (6) Ну и ТабНомер= заменить на "ТабНомер":     | |||
| 10
    
        Kondarat 17.05.21✎ 14:19 | 
        (0) Что-то смахивает на json. Не?     | |||
| 11
    
        brainguard 17.05.21✎ 14:19 | 
        (8) Вот. Сразу видно умного человека     | |||
| 12
    
        Андроны едут 17.05.21✎ 14:20 | 
        (10) смахивает     | |||
| 13
    
        acces969 17.05.21✎ 14:21 | 
        Хочу посмотреть реализацию регулярных выражений в 1с, чтобы это было лаконично и удобно. Надеюсь здесь увижу пример. 
 Давно эти регулярки меня мучают) | |||
| 14
    
        Kondarat 17.05.21✎ 14:21 | 
        (12) Тогда все в структуру и ЗаписатьJSON()     | |||
| 15
    
        brainguard 17.05.21✎ 14:21 | 
        (7) Тогда вам парсер JSON нужен.     | |||
| 16
    
        brainguard 17.05.21✎ 14:22 | 
        (14) +++     | |||
| 17
    
        ptiz 17.05.21✎ 14:25 | 
        (0) Как регулярка поймёт, что "Иванов Иван Иванович" - должен быть в кавычках, а 10000 - нет? 
 Обычный JSON. На входе должно быть типизировано. | |||
| 18
    
        Андроны едут 17.05.21✎ 14:25 | 
        (13) вот предыдущая тема Разложить строку в массив подстрок с помощью регулярных выражений в частном случае. 
 В ней TormozIT красиво решил мою хотелку. Жду когда он появится)) | |||
| 19
    
        Андроны едут 17.05.21✎ 14:26 | 
        (17) легко - там только цифры     | |||
| 20
    
        Почему 1С 17.05.21✎ 14:59 | 
        (18) Так он тебе не через регулярные выражения решил     | |||
| 21
    
        Кирпич 17.05.21✎ 14:59 | 
        Не нужны тут регулярки. СтрРазделить и собрать чо надо     | |||
| 22
    
        pechkin 17.05.21✎ 15:00 | 
        (18) там разложить, а тут заменить     | |||
| 23
    
        Андроны едут 17.05.21✎ 15:07 | 
        (20) я функцию себе сделал исходя из его решения:
 Функция РазложитьВерблюжьюНотацию(Вход) RegExp = Новый COMОбъект("VBScript.RegExp"); RegExp.IgnoreCase = Ложь;//Игнорировать регистр RegExp.Global = Истина;//Поиск всех вхождений шаблона RegExp.MultiLine = Ложь;//Многострочный режим RegExp.Pattern = "([^^])([А-ЯЁ]+)"; Выход = Нрег(RegExp.Replace(Вход,"$1 $2")); Возврат Врег(Лев(Выход,1))+Сред(Выход,2); КонецФункции | |||
| 24
    
        Почему 1С 17.05.21✎ 15:24 | 
        Функция РазложитьВерблюжьюНотацию(Вход)
 RegExp = Новый COMОбъект("VBScript.RegExp"); RegExp.IgnoreCase = Ложь;//Игнорировать регистр RegExp.Global = Истина;//Поиск всех вхождений шаблона RegExp.MultiLine = Ложь;//Многострочный режим RegExp.Pattern = "ТабНомер = (\d+), Фио = ([^,]+), Оклад = (\d+)"; Выход = Нрег(RegExp.Replace(Вход,"Данные = "{ | ""ТабНомер"": $1, | ""Фио"": ""$2"", | ""Оклад"": $3 | }";")); Возврат Выход; КонецФункции | |||
| 25
    
        Гений 1С гуру 17.05.21✎ 17:13 | 
        (0) может мой опыт поможет? https://geniy1s.ru/najti-v-naimenovanii-czvet-i-razmer/     | |||
| 26
    
        polosov 17.05.21✎ 17:52 | 
        (24)Я бы чуть апгрейднул до: "ТабНомер = (\d+),\s+Фио = ([^,]+),\s+Оклад = (\d+)"     | |||
| 27
    
        mistеr 17.05.21✎ 18:33 | 
        (5) Лол, а где числовые, где строковые, известно?     | |||
| 28
    
        mistеr 17.05.21✎ 18:34 | 
        (27) -> (7)     | |||
| 29
    
        ДедМорроз 17.05.21✎ 21:14 | 
        Регулярка может в данной задаче только помочь отделить строку от числа,т.к.в исходнике кавычек не поставили.остальное,лучше кодом,т.к.все зависит от положения кавычек и скобок.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |