Нужно слова из японских иероглифов разделить знаком "!"

Тема в разделе "Шаблон вывода", создана пользователем Michel_S_1958, 30 авг 2015.

  1. Michel_S_1958

    Michel_S_1958 New Member Пользователи

    Регистрация:
    8 июн 2015
    Сообщения:
    38
    Имеется строка:

    元箱 取扱説明書 CD-ROM ストラップ USBケーブル ビデオケーブル バッテリー チャージャー レンズフロントキャップ レンズリアキャップ レンズフード ポーチ

    Все слова в этой строке нужно разделить знаком "!" для последующего применения повторяющихся границ (знак "!" позволит задать начало и конец парсинга). Думал это сделать, применяя функцию поиск-замена и используя регулярное выражение, заменив пробел на знак "!", например
    re:\s+|!
    Да вот беда: между словами неизвестный символ, хотя выглядит как пробел. Поэтому не работает конструкция
    re:\s+|!
    Тогда подумал, что нужно применить конструкцию вида
    re:[^0-9a-zA-ZА-Яа-я]+|!
    Только нужно в перечень между квадратными скобками включить перечень японских иероглифов. А я не знаю как это выглядит. Подскажите, пожалуйста.
     
  2. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.432
    Адрес:
    Latvia
    Непонятный символ похожий на таб или на пробел меняем на пробел, а потом ниже регулярным выражением завершаем замену.
    ' | ' - одинарные кавычки удалить
    re:[\s\t\r\n]+|!

    или просто одной заменой регулярным выражением
    re:[\s\t\r\n ]+|!
     

    Вложения:

    Последнее редактирование: 30 авг 2015
  3. Michel_S_1958

    Michel_S_1958 New Member Пользователи

    Регистрация:
    8 июн 2015
    Сообщения:
    38
    Спасибо, kagorec!
    Вы, как всегда, самый-самый профи в регулярках! Возьму на вооружение подсказку.
     
    Последнее редактирование: 31 авг 2015
  4. Michel_S_1958

    Michel_S_1958 New Member Пользователи

    Регистрация:
    8 июн 2015
    Сообщения:
    38
    Сразу не заметил, но возникла еще одна задача. В указанной выше строке после англоязычного слова "USB" нет пробела. А нужно и после него "всунуть" знак "!".

    元箱 取扱説明書 CD-ROM ストラップ USBケーブル ビデオケーブル バッテリー チャージャー レンズフロントキャップ  レンズリアキャップ レンズフード ポーチ

    Ломал голову часа два и не смог придумать как сделать.

    Я так понимаю, что смысл применения регулярных выражений в функции поиск-замена в том, чтобы находить символы или группу символов, которые затем можно либо удалить, либо заменить на другие символы. А как быть в случае, если найденные символы с помощью регулярного выражения в функции поиск-замена нужно оставить?

    В нашем случае, ищем с помощью регулярного выражения в указанной выше строке группу из двух символов "Bケ" (последняя англоязычная буква "B" от слова "USB" слитно написанная с иероглифом ケ):

    re:[a-zA-Z].{0}[^0-9a-zA-ZА-Яа-я-_., ] (во второй квадратной скобке вместо видимого пробела вставлен непонятный символ, скопированный из строки иероглифов).

    Затем в функции поиск-замена вместо них вставляем знак "!", теряя одновременно сами найденные символы. То есть, в нашем случае:
    re:[a-zA-Z].{0}[^0-9a-zA-ZА-Яа-я-_., ]|!

    Но нам же вместо найденных "Bケ" нужно написать "B!ケ". Как это сделать с помощью регулярного выражения в функции поиск-замена, сохраняя найденные символы?
     
  5. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.432
    Адрес:
    Latvia
    Код:
    ' | '
    re:([\w\d\-_]+)| $1 '
    re:[\s\t\r\n]+|!
    одинарные кавычки ' удалить
     
  6. Michel_S_1958

    Michel_S_1958 New Member Пользователи

    Регистрация:
    8 июн 2015
    Сообщения:
    38
    Спасибо. Работает.

    Посмотрев другие ваши подсказки, сообразил, что для дальнейшего использования полученной конструкции в повторяющихся границах правильнее и красивее использовать в качестве разделителя не один знак "!", а что-то типа "<word>". То есть:

    re:[\s\t\r\n]+|<word>

    Результат:

    <word>元箱<word>取扱説明書<word>CD-ROM<word>ストラップ<word>USB<word>ケーブル<word>ビデオケーブル<word>バッテリー<word>チャージャー<word>レンズフロントキャップ<word>レンズリアキャップ<word>レンズフード<word>ポーチ<word>

    Изучил раздел "Подстановка строк" из пособия о регулярных выражений. Не понял только в чем различие между "$1" и "$&"? И как "читать" формы "$1", "$2", "$8"? Это значит первая, вторая или восьмая найденная группа символов (строка)? А тогда в нашем случае есть две найденные строки: "CD-ROM" и "USB". Почему же работает "$1"?
     
    Последнее редактирование: 31 авг 2015
  7. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.432
    Адрес:
    Latvia
    Если очень по простому кратко пояснить, то:
    Все что в скобках это доллар с числом (вроде переменная называется).
     

Поделиться этой страницей