如何从字符串的开头和结尾删除换行符、回车符和水平制表符?

4

我正在收集用户数据,但这些数据可能非常不可靠。因此,在将其保存到PostgreSQL数据库之前,我必须清除字符串开头和结尾的所有额外字符。

  1. Is this Possible to achieve?

    '   \n \t \n \r\n abc_def_\n xyz \r\n  ' to 'abc_def_\n xyz'
    
  2. Are there any more whitespace like characters that I should care about?

    \n  newline
    \r  carriage return
    \t  horizontal tab
    whitespace
    
2个回答

3

我本以为\s可以涵盖所有空白字符,但是在PostgreSQL的REGEXP_REPLACE中似乎并非如此。相反,使用字符类[\r\n\t ]表示要删除的所有空白字符效果很好。另外,你真正需要的是仅从列的开头和结尾进行修剪,而不是在中间修剪,所以可以搜索以下正则表达式模式:

^[\r\n\t ]*|[\r\n\t ]*$

然后将其替换为空字符串以删除它。
WITH yourTable AS (
    SELECT '   \n \t \n \r\n abc_def_\n xyz \r\n  '::text AS col
)

SELECT
    col,
    REGEXP_REPLACE(col, '^[\\r\\n\\t ]*|[\\r\\n\\t ]*$', '', 'g') AS col_updated
FROM yourTable;

在此输入图片描述

演示


不会真正工作(+ 应该改为 *),假设输入是 'this' - Jasen

2

已经有一个针对此的功能,不需要使用正则表达式。

select trim( e'\t\n\r\ ' from ' your string ' );

1
trim 可以单独工作,但这种方式不起作用。 - Deepak gupta
@Deepakgupta 这里可以运行。select trim('crab' from 'abracadabra'); 结果为 d - Jasen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接