在 oracle 中使用正则表达式查找 POBOX - PL/SQL
Posted
技术标签:
【中文标题】在 oracle 中使用正则表达式查找 POBOX - PL/SQL【英文标题】:Find POBOX using regular expression in oracle - PL/SQL 【发布时间】:2015-12-09 13:07:27 【问题描述】:我想在 oracle - PL/SQL 中使用正则表达式从出现在单词 POBOX 之后的字符串中提取 pobox 值。 下面是一些例子 我/p
1. COMPANY (W L L ) POBOX - 24440 DOHA QATAR TEL 4765888
2. STAR LIMITED POBOX PO KHUPARI PO KHUPARI, TQ-WADA,DIST-THANE 421312INDIA
3. LENNOX ACCOUNT POBOX - N-4875 SD- THE BAHAMAS
4. MEDHIN WEREDA 13, ADDIS ABABA, ETHIOPIA, POBOX- 1110-1668 //UA
5. UHTHOFF, SC POBOX M-2059 06000 MEXICO
6. PHARMACIE AKWABA POBOX AVENUE ESPEREY 00000 ABIDJAN 45 (COTE D IVOIRE),
7. CAAS POBOX 1 .//SG
8. CORAL TECH PETER MAYNARD CO BAY DEVEAUX STREETS 2ND FLOOR POBOX N-1000
9. GULF OCEAN CENTRE - MONTAGU FORESHORE EAST BAY STREET POBOX SS -19084
10. AHMED SAEED DAMMAM 2044 31453 POBOX 011383-KSA
11. MISR COMPRESSOR (CO) 10 TH OF INDUSTRIAL ZONE A-2 POBOX 1001
12. NOKIA AND NETWORKS OY C/O NSN FRANCE POBOX1 3 KARAPORTII
13. HEWLETT PACKARD EUROP BV POBOX 100- POBOX 100-CH-1217
14. DUMONT BERGMAN BIDER + CO., S.C. POBOX456 DELEGACION CUAUHTEMO MX
o/p
1. 24440
2. 421312
3. 4875
4. 1110-1668
5. 2059
6. 00000
7. 1
8. 1000
9. 19084
10. 011383
11. 1001
12. 1
13. 100
14. 456
【问题讨论】:
您尝试采取什么措施来解决问题?显示您当前拥有的代码。 嗨,我尝试了类似 REGEXP_REPLACE(REGEXP_SUBSTR(LINE,'[[:digit:]] |[[:digit:]-]+[[:digit:]]',INSTR(LINE ,'POBOX')),'^-') 【参考方案1】:这样的事情可能会帮助你:
WITH the_table AS (SELECT '1. COMPANY (W L L ) POBOX - 24440 DOHA QATAR TEL 4765888' line FROM dual
UNION
SELECT '2. STAR LIMITED POBOX PO KHUPARI PO KHUPARI, TQ-WADA,DIST-THANE 421312INDIA' FROM dual
UNION
SELECT '3. LENNOX ACCOUNT POBOX - N-4875 SD- THE BAHAMAS' FROM dual
UNION
SELECT '4. MEDHIN WEREDA 13, ADDIS ABABA, ETHIOPIA, POBOX- 1110-1668 //UA' FROM dual
UNION
SELECT '5. UHTHOFF, SC POBOX M-2059 06000 MEXICO' FROM dual
UNION
SELECT '6. PHARMACIE AKWABA POBOX AVENUE ESPEREY 00000 ABIDJAN 45 (COTE D IVOIRE),' FROM dual
UNION
SELECT '7. CAAS POBOX 1 .//SG' FROM dual
UNION
SELECT '8. CORAL TECH PETER MAYNARD CO BAY DEVEAUX STREETS 2ND FLOOR POBOX N-1000' FROM dual
UNION
SELECT '9. GULF OCEAN CENTRE - MONTAGU FORESHORE EAST BAY STREET POBOX SS -19084' FROM dual
UNION
SELECT '10. AHMED SAEED DAMMAM 2044 31453 POBOX 011383-KSA' FROM dual
UNION
SELECT '11. MISR COMPRESSOR (CO) 10 TH OF INDUSTRIAL ZONE A-2 POBOX 1001' FROM dual
UNION
SELECT '12. NOKIA AND NETWORKS OY C/O NSN FRANCE POBOX1 3 KARAPORTII' FROM dual
UNION
SELECT '13. HEWLETT PACKARD EUROP BV POBOX 100- POBOX 100-CH-1217' FROM dual
UNION
SELECT '14. DUMONT BERGMAN BIDER + CO., S.C. POBOX456 DELEGACION CUAUHTEMO MX' FROM dual)
SELECT line, REGEXP_SUBSTR(line,'(.+?)(POBOX.*?)([0-9]([0-9\-]*[0-9])?)(.+)?',1,1,null,3) pobox
FROM the_table
ORDER BY to_number(replace(substr(line,1,2),'.'))
【讨论】:
嘿.. 感谢您的帮助。这适用于我给出的值。但是对于其他一些模式来说它失败了。 以下值失败。 '1。 CORAL TECH PETER MAYNARD CO BAY DEVEAUX 街道 2 楼 POBOX N-1000''2。海湾海洋中心 - 蒙塔古滨海东湾街 POBOX SS -19084''3.艾哈迈德·赛义德·达曼 2044 31453 邮政信箱 011383-KSA ''4。 MISR 压缩机 (CO) 10 TH OF Industrial Zone A-2 POBOX 1001''5。 NOKIA AND NETWORKS OY C/O NSN 法国 POBOX1 3 KARAPORTII ''6。惠普欧洲 BV POBOX 100- POBOX 100-CH-1217 ''7。 DUMONT BERGMAN BIDER + CO., S.C. POBOX456 DELEGACION CUAUHTEMO MX'......对不起,我不知道如何在代码中发布这些值。 是的,那个正则表达式不能用它,因为现在 POBOX 不仅是由数字组成的。我们需要知道所有可能的 POBOX 格式才能得出正则表达式 我已经修改了原始问题以添加更多示例。我认为目前它涵盖了大部分组合。 @VidyaPandey 我刚刚编辑了我的答案以适应您提供的新数据。它现在可以工作,但它无法与数据库中的每个 pobox 一起工作以上是关于在 oracle 中使用正则表达式查找 POBOX - PL/SQL的主要内容,如果未能解决你的问题,请参考以下文章
在 Oracle SQL 中使用正则表达式在字符串字段中查找 Unicode 字符
使用 Oracle 的正则表达式功能来查找双元音序列,例如。 ‘ie’, ‘ee’, ‘oa’