1

Тема: AHK: Обработка с заменой в RegExReplace

Добрый день, столкнулся с интересной проблемой.
Вот код:

string =
(
{"response":[40,{"aid":353525103,"owner_id":159743853,"artist":"Frederic Francois Chopin (Фредерик Шопен)","title":".,Nocturne No20 in сis-]moll op posth (OST Пианист)","duration":250,"url":"http:\/\/cs4586.vk.me\/u1798432\/audios\/9d2bdaa30ba6.mp3?extra=DigC15a8M43SFvXjYL3zrVyiNVKzqg9vo0E1BAAhLtgxPSM9SzT49a5f1pU5JtKmYOd0FjAj4-7kitpR-JuwuvFJOETN7Uop17E","lyrics_id":"241931630","genre":2}]}
)

string := RegExReplace(string, """title"":""(.*?)""", """title"":""$1""")

MsgBox,%string%

Результат у меня выходит вот такой:

{"response":[40,{"aid":353525103,"owner_id":159743853,"artist":"Frederic Francois Chopin (Фредерик Шопен)","title":".,Nocturne No20 in сis-]moll op posth (OST Пианист)","duration":250,"url":"http:\/\/cs4586.vk.me\/u1798432\/audios\/9d2bdaa30ba6.mp3?extra=DigC15a8M43SFvXjYL3zrVyiNVKzqg9vo0E1BAAhLtgxPSM9SzT49a5f1pU5JtKmYOd0FjAj4-7kitpR-JuwuvFJOETN7Uop17E","lyrics_id":"241931630","genre":2}]}

А мне требуется обработать его и получить вот такой:

{"response":[40,{"aid":353525103,"owner_id":159743853,"artist":"Frederic Francois Chopin (Фредерик Шопен)","title":"Nocturne No20 in сismoll op posth OST Пианист","duration":250,"url":"http:\/\/cs4586.vk.me\/u1798432\/audios\/9d2bdaa30ba6.mp3?extra=DigC15a8M43SFvXjYL3zrVyiNVKzqg9vo0E1BAAhLtgxPSM9SzT49a5f1pU5JtKmYOd0FjAj4-7kitpR-JuwuvFJOETN7Uop17E","lyrics_id":"241931630","genre":2}]}

То есть мне требуется убрать в данном поле

"title":".,Nocturne No20 in сis-]moll op posth (OST Пианист)"

Все кроме букв и цифр и знака _

Долго мучаюсь уже, помогите пожалуйста.

2

Re: AHK: Обработка с заменой в RegExReplace

А какова глобальная задача? Что это за строка, как вы её получили, всегда ли строка будет иметь именно такую структуру?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Обработка с заменой в RegExReplace

teadrinker пишет:

А какова глобальная задача? Что это за строка, как вы её получили, всегда ли строка будет иметь именно такую структуру?

Это ответ от сервера в формате JSON, строка будет иметь такую структуру всегда, но значения title будут разные

4

Re: AHK: Обработка с заменой в RegExReplace

Не нужно цитировать предыдущий пост.
У меня проще не вышло:

str =
(
{"response":[40,{"aid":353525103,"owner_id":159743853,"artist":"Frederic Francois Chopin (Фредерик Шопен)","title":".,Nocturne No20 in сis-]moll op posth (OST Пианист)","duration":250,"url":"http:\/\/cs4586.vk.me\/u1798432\/audios\/9d2bdaa30ba6.mp3?extra=DigC15a8M43SFvXjYL3zrVyiNVKzqg9vo0E1BAAhLtgxPSM9SzT49a5f1pU5JtKmYOd0FjAj4-7kitpR-JuwuvFJOETN7Uop17E","lyrics_id":"241931630","genre":2}]}
)
pos := RegExMatch(str, """title"":""\K[^""]+", found)
MsgBox, % RegExReplace(str, "\Q" . found . "\E", RegExReplace(found, "i)(*UCP)[^\w ]"), "", 1, pos)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Обработка с заменой в RegExReplace

teadrinker, работает почти как надо. Но если мне в запросе выдает 2 элемента, в них можно как-то заменить? Элементы могут быть разные, но структура у них всегда одна.

{"response":[40,{"aid":353525103,"owner_id":159743853,"artist":"Frederic Francois Chopin (Фредерик Шопен)","title":".,Nocturne No20 in сis-]moll op posth (OST Пианист)","duration":250,"url":"http:\/\/cs4586.vk.me\/u1798432\/audios\/9d2bdaa30ba6.mp3?extra=DigC15a8M43SFvXjYL3zrVyiNVKzqg9vo0E1BAAhLtgxPSM9SzT49a5f1pU5JtKmYOd0FjAj4-7kitpR-JuwuvFJOETN7Uop17E","lyrics_id":"241931630","genre":2},{"aid":353525103,"owner_id":159743853,"artist":"Frederic Francois Chopin (Фредерик Шопен)","title":".,Nocturne No20 in сis-]moll op posth (OST Пианист)","duration":250,"url":"http:\/\/cs4586.vk.me\/u1798432\/audios\/9d2bdaa30ba6.mp3?extra=DigC15a8M43SFvXjYL3zrVyiNVKzqg9vo0E1BAAhLtgxPSM9SzT49a5f1pU5JtKmYOd0FjAj4-7kitpR-JuwuvFJOETN7Uop17E","lyrics_id":"241931630","genre":2}]}

6

Re: AHK: Обработка с заменой в RegExReplace

str =
(
{"response":[40,{"aid":353525103,"owner_id":159743853,"artist":"Frederic Francois Chopin (Фредерик Шопен)","title":".,Nocturne No20 in сis-]moll op posth (OST Пианист)","duration":250,"url":"http:\/\/cs4586.vk.me\/u1798432\/audios\/9d2bdaa30ba6.mp3?extra=DigC15a8M43SFvXjYL3zrVyiNVKzqg9vo0E1BAAhLtgxPSM9SzT49a5f1pU5JtKmYOd0FjAj4-7kitpR-JuwuvFJOETN7Uop17E","lyrics_id":"241931630","genre":2},{"aid":353525103,"owner_id":159743853,"artist":"Frederic Francois Chopin (Фредерик Шопен)","title":".,Nocturne No20 in сis-]moll op posth (OST Пианист)","duration":250,"url":"http:\/\/cs4586.vk.me\/u1798432\/audios\/9d2bdaa30ba6.mp3?extra=DigC15a8M43SFvXjYL3zrVyiNVKzqg9vo0E1BAAhLtgxPSM9SzT49a5f1pU5JtKmYOd0FjAj4-7kitpR-JuwuvFJOETN7Uop17E","lyrics_id":"241931630","genre":2}]}
)
pos := 0
While pos := RegExMatch(str, """title"":""\K[^""]+", found, pos + 1)
   str := RegExReplace(str, "\Q" . found . "\E", RegExReplace(found, "i)(*UCP)[^\w ]"), "", 1, pos)

MsgBox, % str
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Обработка с заменой в RegExReplace

{"response":[
40,
{"aid":353525103,
"owner_id":159743853,
"artist":"Frederic Francois Chopin (Фредерик Шопен)",
"title":".,Nocturne No20 in сis-]moll op posth (OST Пианист)",
"duration":250,
"url":"http:\/\/cs4586.vk.me\/u1798432\/audios\/9d2bdaa30ba6.mp3?extra=1234",
"lyrics_id":"241931630",
"genre":2},
{"aid":353525103,
"owner_id":159743853,
"artist":"Баста",
"title":"Ты моя вселенная",
"duration":220,
"url":"http:\/\/cs4586.vk.me\/u1798432\/audios\/9d2bdaa30ba6.mp3?extra=1234567",
"lyrics_id":"241931630",
"genre":2},
]}

Как-то так выглядит структура, если ее разобрать.