正则表达式替换为结尾和开头没有空格的字符串

Posted

技术标签:

【中文标题】正则表达式替换为结尾和开头没有空格的字符串【英文标题】:Regex replace to a string without space at the end and beginning 【发布时间】:2021-07-07 15:39:57 【问题描述】:

我想从字符串中删除以下字符 、_ 并将其设为 initcap。

OTHER_QUESTIONS,MISSING_DOCUMENT

期望的结果:

Other Questions, Missing Document

我尝试了以下方法,但它为第一个和最后一个字符增加了空格,那么我怎样才能达到上述预期的结果?

regexp_replace(INITCAP('OTHER_QUESTIONS,MISSING_DOCUMENT'), '[_]', ' ', 'g'),

【问题讨论】:

TRIM(BOTH FROM regexp_replace(INITCAP('OTHER_QUESTIONS,MISSING_DOCUMENT'), '[_]', ' ', 'g')) 这也将删除前导和尾随空格。 是不是也意味着,后面要加一个空格,如果没有呢? @WiktorStribiżew 是的,完全正确! 【参考方案1】:

你可以使用

SELECT INITCAP(
  TRIM(
    REGEXP_REPLACE(REGEXP_REPLACE('OTHER_QUESTIONS,MISSING_DOCUMENT', ',(\S)', ', \1', 'g'), '[_]+', ' ', 'g')
  )
)

见an SQL fiddle。

,(\S) 正则表达式将匹配逗号并将其后的任何非空白字符捕获到第 1 组,替换将, \1,即逗号、空格和第 1 组值。然后,[_]+ 正则表达式将匹配所有出现的一个或多个 _ 字符,而 regexp_replace 将用空格替换它们,trim 将删除前导/尾随空格。

【讨论】:

【参考方案2】:

只需去掉 Regex 中的空格,''-->'',替换:

regexp_replace(INITCAP('OTHER_QUESTIONS,MISSING_DOCUMENT'), '[_]', ' ', 'g')

regexp_replace(INITCAP('OTHER_QUESTIONS,MISSING_DOCUMENT'), '[_]', '', 'g')

【讨论】:

以上是关于正则表达式替换为结尾和开头没有空格的字符串的主要内容,如果未能解决你的问题,请参考以下文章

C# 正则表达式 - 排除文本开头和结尾的下划线和空格

正则表达式:指定“空格或字符串开头”和“空格或字符串结尾”

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式