oracle 用于字符串格式设置的REGEXP,用于对以空格分隔的字符和数字进行分组

b5lpy0ml  于 2023-03-07  发布在  Oracle
关注(0)|答案(3)|浏览(139)

Hello我正在尝试格式化一个给定的字符串,使其组合数字和字符,并在它们之间放置空格''。例如:01ABC23fg98应给出输出:01 ABC 23装配98
有什么建议吗?
我尝试了REGEXP_REPLACE(input_String,'',''),它的作用相反(它删除给定字符串中的空格)

8zzbczxx

8zzbczxx1#

如果我们将REGEXP_REPLACE()与捕获组一起使用,则可以这样做:

SELECT input_String,
       TRIM(REGEXP_REPLACE(input_String, '([A-Za-z]+)', ' \1 ')) AS output_String
FROM yourTable;


∮ ∮ ∮ ∮
这个正则表达式替换将所有字母单词子字符串替换为两边用空格包围的相同子字符串。应该理解,这有效地将字母单词子字符串与数字子字符串分开。外部调用TRIM()是必要的,因为如果字母单词出现在输入字符串的开头或结尾,替换将导致前导或尾随空格。

5fjcxozz

5fjcxozz2#

要在SQL中拆分字符串并在字母和数字之间添加空格,可以组合使用字符串函数和正则表达式。下面是使用用户定义函数实现此目的的SQL查询示例:

CREATE FUNCTION dbo.SplitAlphaNum (@InputString VARCHAR(100))
    RETURNS VARCHAR(100)
    AS
    BEGIN
      DECLARE @OutputString VARCHAR(100) = '', @Index INT = 1;
      WHILE @Index <= LEN(@InputString)
      BEGIN
        IF SUBSTRING(@InputString, @Index, 1) LIKE '[A-Za-z]'
        BEGIN
          SET @OutputString += ' ' + SUBSTRING(@InputString, @Index, 1);
        END
        ELSE
        BEGIN
          SET @OutputString += SUBSTRING(@InputString, @Index, 1);
        END
        SET @Index += 1;
      END
      RETURN LTRIM(RTRIM(@OutputString));
    END
    
    SELECT dbo.SplitAlphaNum('01ABC23fg98');

上面的查询定义了一个名为dbo.SplitAlphaNum的用户定义函数,该函数将输入字符串作为参数,并返回在字母和数字之间添加空格的输出字符串。
该函数循环遍历输入字符串中的每个字符,如果字符是字母表,则在其前面添加一个空格;否则,它只是将该字符添加到输出字符串中。最后,它在返回输出字符串之前,从输出字符串中删除任何前导或尾随空格。
要使用该函数,只需在SELECT语句中将输入字符串作为参数调用它即可,如上面的示例所示。

mnemlml8

mnemlml83#

当然,但你没有告诉你想要哪种编程语言,但无论如何,我会在python上这样做,我们开始:

import re

input_string = '01ABC23fg98'
output_string = re.sub(r'(\d+|\D+)', r'\1 ', input_string).strip()

print(output_string)

输出必须如下所示:01 ABC 23装配98

相关问题