在 plpython 中处理反斜杠

Posted

技术标签:

【中文标题】在 plpython 中处理反斜杠【英文标题】:Handling backslashes in plpython 【发布时间】:2018-07-14 16:10:11 【问题描述】:
CREATE OR REPLACE FUNCTION CLEAN_STRING(in_str varchar) returns varchar 
AS
$$
def strip_slashes(in_str):

    while in_str.endswith("\\") or in_str.endswith("/"):
            in_str = in_str[:-1]

    in_str = in_str.replace("\\", "/")
    return in_str
clean_str = strip_slashes(in_str)
return clean_str
$$
LANGUAGE plpythonu ;

这给了我IndentationError。但是,如果我删除反斜杠,它工作正常。如何处理 plpythonu 中的反斜杠?

【问题讨论】:

【参考方案1】:

我现在使用了以下解决方法。

CREATE OR REPLACE FUNCTION CLEAN_STRING(in_str varchar) returns varchar 
AS
$$
def strip_slashes(in_str):

    while in_str.endswith(chr(92)) or in_str.endswith("/"):
            in_str = in_str[:-1]

    in_str = in_str.replace(chr(92), "/")
    return in_str
clean_str = strip_slashes(in_str)
return clean_str
$$
LANGUAGE plpythonu ;

【讨论】:

【参考方案2】:

我认为这与在字符串中需要转义反斜杠等特殊字符有关。

我经历了类似的事情,我会描述我的情况,希望它能给你一些启发。

我正在编写一个 greenplum 函数,需要创建一个 SQL 命令并将其应用于变量,如下所示:

v_cmd := 'insert into tst_regexp2 (codigo) select cast(t.codigo as  integer) from (select regexp_replace(''([:space:]|\u00a0|)+$'', '''') as codigo from tst_regexp) t;';

但对 "\u00a0" 的强烈反对给函数创建带来了恼人的警告。我尝试了正常的转义解决方案,例如复制反冲“\\u00a0”,但没有解决问题。

经过一番研究,我发现了这个特殊的“E”命令,它告诉你在字符串之前使用它时所有特殊字符都应该被转义,所以下面的命令就可以了:

v_cmd := 'insert into tst_regexp2 (codigo) select cast(t.codigo as  integer) from (select regexp_replace(''([:space:]|'||E'\u00a0|)+$'', '''') as codigo from tst_regexp) t;';

希望对你有所帮助。

最后,如果你正在编写一个函数来清除字符串中的特殊字符,我建议你看看 regexp。下面的代码我用来清除所有内容(到目前为止),但字符串中的数字除外,我相信您会找到适合您的表达式:

regexp_replace(regexp_replace(regexp_replace(upper(codigo), ''[[:alpha:][:blank:][:punct:][:cntrl:]]'', '''', ''g''), ''[ÀÈÌÒÙÁÉÍÓÚÂÔÊÎÛÃÕ]'', '''', ''g''), ''([:space:]|'||E'\u00a0|)+$'', '''') as codigo

问候

【讨论】:

以上是关于在 plpython 中处理反斜杠的主要内容,如果未能解决你的问题,请参考以下文章

js 反斜杠 处理

python抓取的网页源代码中包含反斜杠,怎么处理

在 Windows 批处理文件中将反斜杠更改为正斜杠

数据库字段包含反斜杠的查询处理

FireFox 和 Chrome 在 url 中处理 \(反斜杠)的不同行为

如何去掉Json字符串中反斜杠