首頁 > 軟體

教你用正規表示式提取數位和小數點

2022-10-02 14:01:20

1、初識

1.1、純數位提取

-- "提取123abc提取":提取當前字元當中的123
 
-- 1.Hive:
select regexp_replace('提取123abc提取','[^0-9]+','')    "123"
select regexp_replace('提取123abc提取','D','')      "提取123abc提取"
 
-- 2.PG: 'g':global,全域性替換
select regexp_replace('提取123abc提取','[^0-9]+','','g' )   "123"
select regexp_replace('提取123abc提取','D','','g' )        "123"

1.2、帶有小數點數位提取

-- "提取123.11abc提取":提取當前字元當中的123.11
 
-- 1.Hive:小數或者整數資料提取
select regexp_extract('提取123.11abc提取','[0-9]+([.]{1}[0-9]+){0,1}',0)    "123.11"
select regexp_extract('提取123abc提取','[0-9]+([.]{1}[0-9]+){0,1}',0)   "123"
 
-- 2.PG:
select regexp_replace('提取123.11abc提取','[^d.d]','','g') "123.11"

2、語法

字元說明等效於
將下一字元標記為特殊字元、文字、反向參照或八進位制跳脫符。
e.g:“n"匹配字元"n”。"n"匹配換行符。序列"\“匹配”","(“匹配”("
 
^匹配輸入字串開始的位置 
$匹配輸入字串結束的位置 
*零次或多次匹配前面的字元或子表示式{0,}
+一次或多次匹配前面的字元或子表示式{1,}
?零次或一次匹配前面的字元或子表示式{0,1}
{n}n是非負整數。正好匹配n次。
e.g:"o{2}"與"job"中的"o"不匹配,但與"food"中的兩個"o"匹配
 
{n,}n是非負整數。至少匹配n次。
e.g:"o{2,}“不匹配"job"中的"o”,而匹配"fooooood"中的所有o
"o{1,}“等效於"o+”
"o{0,}“等效於"o*”
{n,m}m和n是非負整數,其中n<=m。匹配至少n次,至多m次。
e.g:"o{1,3}"匹配"fooooooood"中的頭三個o
"o{0,1}“等效於"o?”
?當此字元緊隨任何其他限定符(*、+、?、{n}、{n,}、{n,m})之後,
匹配模式是“非貪心匹配”。“非貪心匹配”:匹配搜尋到的儘可能短的字串,
而預設的“貪心匹配”則是匹配搜尋到儘可能長的字串。
e.g:"oooo"中,"o+?“只能夠匹配出單個"o”;而"o+“匹配出所有的"o”
 
.匹配除"rn"之外的任何單個字元 
[xyz]字元集。匹配包含的任一字元。
e.g:"[abc]“匹配"plain"中的"a”
 
[^xyz]反向字元集。匹配未包含的任何字元。
e.g:"[^abc]“匹配"plain"中"p”,“l”,“i”,“n”
 
[a-z]字元範圍。匹配指定範圍內的任何字元。
e.g:"[a-z]"匹配"a"到"z"範圍內的任何小寫字母
 
[^a-z]反向範圍字元。匹配不在指定範圍內的任何字元。
e.g:"[^a-z]"匹配任何不在"a"到"z"範圍內的任何字元
 
d數位字元匹配。[0-9]
D非數位字元匹配。[^0-9]
s匹配任何空白字元,包括空格、製表符、換頁符等 
S匹配任何非空白字元 
w匹配任何類字元,包括下劃線[A-Za-z0-9_]
W與任何非單詞字元匹配[^A-Za-z0-9_]
   

3、範例程式碼

-- PG:regexp_match:匹配函數
select regexp_match('會議事業部69.57%/','[d.d]{1,}')	"{69.57}"
select regexp_match('會議事業部69%57%/','[d%d]{1,}')	"{69%57%}"
-- 子表示式中:[d.d]:這時候:'.' 不再是匹配除"rn"之外的任何單個字元
select regexp_match('會議事業部69%57%/','[d.d]{1,}')	"{69}"

4、參考Demo

-- PostgreSQL正則表達使用
https://blog.csdn.net/qq_22994783/article/details/82699559
-- Hive常用正規表示式
https://cloud.tencent.com/developer/article/1538552

總結

到此這篇關於用正規表示式提取數位和小數點的文章就介紹到這了,更多相關表示式提取數位小數點內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com