转义符都知道,但可能会理解不到位,或者不深入。今天在工作中,遇到了转义符的问题,记录于此,也供大伙参考。
1.问题概述
爬取到的文本段落,中间有\t \r未处理就存入数据库了(文本截取如下: '......有效性。\r次要......' ),导致后来需要刷库,而在刷库过程中,
我用的是:UPDATE china_drug_trials SET public_test_info = REPLACE(public_test_info, CHAR(10), '');
但应该是:UPDATE china_drug_trials SET public_test_info = REPLACE(public_test_info, "\\r", '') ;
2.问题反思
错误出在理解 转义符何时生效上。
- 转义字符(如\n \r)什么时候生效?
当它会被解释器解释的时候,如print输出时。
- 如果转义字符(如\n \r)在字符串里呢?
那么它只是代表其特殊意义,没被解释,并不生效。即上文提到的字符串,要替换其中的 \r,用 \\r 就可以了(两个\ 转义 转义符'\')。
(就好像玫瑰里塞个求婚钻戒,没被女票看到就是没生效的,虽然你知道这枚钻戒是有其特殊意义的)
示例:
\n 没被解释器解释,并不生效,所以 b 指的是 '123\n456'
\n 被解释器解释,即print输出时,转义字符生效啦,换了行
- 如果字符串中有已经生效的转义符呢?(如换行或者制表符)
要操作它,要么直接找\r \n ,要么根据其ASCII码找。即上文提到的字符串,要替换其中已生效的\r,用 \r 或者CHAR(9)。
示例:
替换字符串 a 中已经生效的转义符,要么直接找\r \n ,要么根据其ASCII码找。