首页 > 解决方案 > 替换功能中的特殊字符

问题描述

GREL 替换函数需要 3 个字符串,或一个字符串、一个正则表达式和一个字符串。在用于替换的第 3 个字符串中,某些字符具有特殊行为:\、\、\t、\n、\'、\" 以及其他一些组合。\ 什么都不做,或者错误 \ 被解释为 \ \t被解释为制表符 \n 被解释为换行符 \" 被解释为 " \' 被解释为 '

例如:“abab”.replace('b',"\") ->“偏移 19 处的解析错误:缺少数字、字符串、标识符、正则表达式或带括号的表达式”

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

我想它与Java有关......还有其他特殊组合吗?它是否记录在 wiki 上的某个地方?

标签: openrefine

解决方案


在字符串中,反斜杠 (\) 具有特殊含义。它基本上说不应该按照通常的意义考虑以下字符。这就是为什么字符串 "t" 只是字母 t,但 "\t" 表示 a 的原因tab

此转义字符还用于在字符串中包含引号。例如,字符串 '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               |

推荐阅读