gpt4 book ai didi

postgresql - REGEXP_REPLACE 替换两个符号之间的空格

转载 作者:行者123 更新时间:2023-11-29 13:11:27 24 4
gpt4 key购买 nike

我需要用两个特定符号(@ 和 &)之间的 % 替换所有空格;喜欢以下内容:

'this @ is test   &that did not @turn& out well' 

应转换为

'this @%is%test%&that did not @turn& out well'

'@pattern matching&  is my number one enemy'

'@pattern%matching&  is my number one enemy'

我几乎阅读了 stackoverflow 和其他站点中的所有相关问题,但无法获得有用的答案。

最佳答案

执行此操作的一种(低效)方法是执行多次 REGEXP_REPLACE 调用。

例如,让我们看一下下面的plpgsql 函数。

CREATE OR REPLACE FUNCTION replaceSpacesBetweenTwoSymbols(startChar TEXT, endChar TEXT, textToParse TEXT)
RETURNS TEXT
AS $$
DECLARE resultText TEXT := textToParse;
DECLARE tempText TEXT := textToParse;
BEGIN
WHILE TRUE LOOP
tempText = REGEXP_REPLACE(resultText,
'(' || startChar || '[^' || endChar || ']*)' || '( )(.*' || endChar || ')',
'\1%\3');
IF tempText = resultText
THEN RETURN resultText;
END IF;
resultText := tempText;
END LOOP;
RETURN resultText;

END;
$$
LANGUAGE 'plpgsql';

我们创建了一个接受三个参数的函数,startCharendChar 和保存将被修剪的文本的textToParse

我们首先创建一个基于startCharendChar 的正则表达式。如果 startChar 的值为 @ 并且 endChar 的值为 & 我们将得到以下正则表达式:

(@[^&]*)( )(.*&)

这个正则表达式由三组组成:

  1. (@[^&]*) - 该组匹配 @ 和空格字符之间的文本 - ' ';

  2. ( ) - 该组匹配单个空格字符。

  3. (.*&) - 该组匹配空格字符和 & 字符之间的文本。

为了替换空格(第 2 组),我们使用以下 REGEXP_REPLACE 调用:

REGEXP_REPLACE(resultText,' (@[^&]*)( )(.*&)', '\1%\3')

从该表达式中,您可以看到我们正在用 % 字符替换第二组(这是一个空格)。

这样,每次执行 REGEXP_REPLACE 时,我们只会替换一个空格。一旦我们发现没有更多的空格需要替换,我们返回修改后的TEXT

此时,空格被替换为%字符。我们需要做的最后一件事是用单个 % 替换多个连续的 % 字符。

这可以通过最后调用另一个 REGEXP_REPLACE 来完成。例如:

SELECT REGEXP_REPLACE(replaceSpacesBetweenTwoSymbols('@','&','this @ is test   &that did not @turn& out well'),'%{2,}','%');

会回来

this @%is%test%&that did not @turn& out well

结果,虽然这

SELECT REGEXP_REPLACE(replaceSpacesBetweenTwoSymbols('@','&','this is @a more  complex& task @test a a & w'),'%{2,}','%');

会回来

this is @a%more%complex& task @test%a%a%& w

结果。

关于postgresql - REGEXP_REPLACE 替换两个符号之间的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54098290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com