正则表达式(Posix)仅获得第一个单词,不包括数字

时间:2019-06-28 13:02:56

标签: regex posix

Regex的新功能(最近已将它添加到DB2 for i中的SQL中)。我对不同的引擎一无所知,但研究表明它“基于POSIX扩展正则表达式”。

我想从地址中获得街道名称(第一个非数字词)。

例如

101 Main Street = Main

2/b Pleasant Ave = Pleasant

5H Unpleasant Crescent = Unpleasant

很抱歉,我没有论坛软件建议的不起作用的字符串。我什至不知道从哪里开始。我尝试了一些在搜索中找到的内容,但它们没有产生任何结果或第一个“单词”-即数字(101、2 / b,5H)。

谢谢

编辑:尽管对于许多驻地专家来说,IBM在DB2数据库家族上的regex实施看起来似乎太陌生,但我还是会继续提供一些更详细的信息,以防万一。帮助。

该要求的简单英文说明为:

基本/可接受:查找不包含数字或特殊字符的第一个单词/不间断字符串

高级/理想:找到第一个单词,该单词包含三个或更多字符,只能是字母和零或一个嵌入的破折号/连字符,而不能包含数字或其他字符。

其他示例(顶部的原始示例仍然有效)

190 - 192 Tweety-bird avenue = Tweety-bird

190-192 Tweety-bird avenue = Tweety-bird

Charles Bronson Place = Charles

190H Charles-Bronson Place = Charles-Bronson

190 to 192 Charles Bronson Place = Charles

第二次修改: 在互联网上闲逛并尝试发现的每一个模糊的连接表达,我偶然发现了this one

[a-zA-Z]+(?:[\s-][a-zA-Z]+)*

实际上效果很好-它提供了街道名称和街道类型,经过反思实际上可以满足我的目的,也可以单独使用街道名称(我可以轻松地将常用缩写-从RD扩展为ROAD-即时添加) 。

示例SQL:

select HAD1,                                        
 regexp_substr(HAD1, '[a-zA-Z]+(?:[\s-][a-zA-Z]+)*')
from ECH                                            
where HEDTE > 20190601                              

样本输出

Ship To                                             REGEXP_SUBSTR      
Address                                                                
Line 1                                                                 
32 CHRISTOPHER STREET                               CHRISTOPHER STREET 
250 - 270 FEATHERSTON STREET                        FEATHERSTON STREET 
118 MONTREAL STREET                                 MONTREAL STREET    
7 BIRMINGHAM STREET                                 BIRMINGHAM STREET  
59 MORRISON DRIVE                                   MORRISON DRIVE     
118 MONTREAL STREET                                 MONTREAL STREET    
MASON ROAD                                          MASON ROAD         

我知道这不完全是我问的问题,所以对任何可以这样做但忠实地遵循原始请求的人表示歉意。

2 个答案:

答案 0 :(得分:0)

不确定这是否符合Posix的要求,但是可以使用以下方法:Warning FailedCreatePodSandBox 16s kubelet, srv1 Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "b85728b51a18533e9d57f6a1b1808dbb5ad72bff4d516217de04e7dad4ce358d" network for pod "dpl-6f56777485-6jzm6": NetworkPlugin cni failed to set up pod "dpl-6f56777485-6jzm6_default" network: failed to set bridge addr: "cni0" already has an IP address different from 10.244.16.1/24 ,例如here

脚本假定第一个块是建筑物的编号,第二个块是街道的名称,最后一个块是^[\w\/]+?\s((\w+\s)+?)\s*\w+?$

这也应该满足街道名称中带有空格的情况。

答案 1 :(得分:-1)

使用以下正则表达式与您的示例匹配:

(?<=[^ ]+ )[^ ]*[ ]