Специальные символы в функции замены

Функция замены GREL ожидает 3 строки или строку, регулярное выражение и строку. В третьей строке, используемой для замены, некоторые символы имеют специальное поведение: \, \, \t, \n, \', \"и, возможно, некоторые другие комбинации. \ Ничего не делает, или ошибка \ интерпретируется как \ \ t интерпретируется как символ табуляции \ n интерпретируется как новая строка \ "интерпретируется как" \ "интерпретируется как '

Пример: "abab".replace('b',"\") -> "Ошибка синтаксического анализа по смещению 19: отсутствует номер, строка, идентификатор, регулярное выражение или выражение в скобках"

"abab".replace ('b', "\ t") -> aa

Я полагаю, это как-то связано с Java... Есть ли другие специальные комбинации? Это задокументировано где-то в вики?

1 ответ

Решение

В строке обратный слеш (\) имеет особое значение. В основном это говорит о том, что следующий символ не следует рассматривать в его обычном смысле. Вот почему строка "t" это просто буква t, но "\t" означает tab,

Этот escape-символ также используется для включения кавычек в строку. Например, строка 'L'alouette' вызовет ошибку, поскольку содержит кавычку того же типа, что и строка, окружающая строку. Эту проблему можно избежать, выбрав внутреннюю ': 'L\'alouette' (или используя двойные кавычки: 'l'alouette')

В вашем примере OpenRefine понимает, что вы хотите экранировать вторую кавычку ("\"), и считает, что ваша строка не закончена. В этом случае правильный синтаксис будет экранировать сам \: "abab".replace('b', "\\")

Список специальных символов

| Special characters | Display               |
|--------------------|-----------------------|
| \'                 | Single quotation mark |
| \"                 | Double quotation mark |
| \\                 | Backslash             |
| \t                 | Tab                   |
| \b                 | Backspace             |
| \r                 | Carriage return       |
| \f                 | Formfeed              |
| \n                 | Newline               |
Другие вопросы по тегам