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

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

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

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

2
Mathieu Saby 22 Сен 2018 в 15:10

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               |
2
Ettore Rizza 22 Сен 2018 в 12:55