Специальные символы в функции замены
Функция замены 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 |