在第一个空格之后直到字符串结尾

Posted

技术标签:

【中文标题】在第一个空格之后直到字符串结尾【英文标题】:get till end of string after first space 【发布时间】:2017-07-18 11:15:17 【问题描述】:

当我尝试使用 split_part 时,我需要按如下方式拆分字符串

select split_part('8 HAMPSHIRE RD',' ',2)    

预期输出:HAMPSHIRE RD

【问题讨论】:

【参考方案1】:

没有正则表达式的更便宜的解决方案:

SELECT substring (
          '8 HAMPSHIRE RD'
          FROM position(' ' IN '8 HAMPSHIRE RD') + 1
       );

【讨论】:

【参考方案2】:

使用regexp_replace():

select regexp_replace('8 HAMPSHIRE RD', '.*?\s', '');

 regexp_replace 
----------------
 HAMPSHIRE RD
(1 row)

使用字符串操作函数的替代解决方案:

with my_table(str) as (
    values ('8 HAMPSHIRE RD')
)
select right(str, -strpos(str, ' '))
from my_table;

如果您想跳过仅包含数字的第一个单词,您应该使用\d(数字)而不是.(任何字符):

select regexp_replace('8 HAMPSHIRE RD', '\d*?\s', '');

【讨论】:

谢谢,但你能解释一下 '.*?\s' 是什么意思吗? \s 是否表示空格和 .表示从位置 1 和 *?表示直到字符串的结尾 表达式的意思是任何字符串直到第一个空格,包括这个空格? 符号强制正则表达式变得懒惰(即查找第一个空格)。 我将此问题标记为已回答,但是对于仅检查数字后的空格是否有帮助?因为当我将上面的表达式应用于像“PO BOX 203”这样的地址时,上面的表达式给了我“BOX 203”,我期望结果为“PO BOX 203”。抱歉,我之前应该在我的问题中包含这个示例

以上是关于在第一个空格之后直到字符串结尾的主要内容,如果未能解决你的问题,请参考以下文章

“在第一个目标之前开始。停止。“错误

在第一个空格出现时拆分字符串

在第一个空格之前获取字符

Bash 在第一个空格后结束变量?

在第一个连字符之前隔离字符串的前导部分并从匹配中省略任何尾随空格

正则表达式 - 在第 n 个空格之间匹配数据并在第 n 个空格处停止