regexp_replace

 

pandas和SQL數據分析實戰

https://study.163.com/course/courseMain.htm?courseId=1006383008&share=2&shareId=400000000398149html

 

舉例java

 

 

hive中 regexp_replace的用法,替換特殊字符問題

數據倉庫中有的字段不合格,有特殊字符,好比換行符。python

poi_name \n19013 \n12013

怎麼把換行符替換掉呢?nginx

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-StringOperatorsgit

regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)正則表達式

Returns the string resulting from replacing all substrings in INITIAL_STRING that match the java regular expression syntax defined in PATTERN with instances of REPLACEMENT. For example, regexp_replace("foobar", "oo|ar", "") returns 'fb.' Note that some care is necessary in using predefined character classes: using '\s' as the second argument will match the letter s; '\s' is necessary to match whitespace, etc.sql

官網說用兩個反斜槓代替一個,即一個反斜槓用來轉義。express

實踐了一下,不行,得4個apache

select regexp_replace(poi_name,'\\\\n','') 

poi_name
19013
12013

  

   

轉自markdown

https://blog.csdn.net/weixin_43767002/article/details/85605220

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htm

regexp_replace函數是replace函數的擴展函數,用於經過正則表達式來進行匹配替換,默認狀況下,每次匹配到的正則,都替換爲replace_string,返回的字符串與source_char字符集相同。若是source_char爲非LOB類型,則返回varchar2數據類型,若是爲LOB類型,則返回CLOB類型,該函數符合POSIX正則和Unicode正則。

source_char是一個用做搜索的值,它一般是一種字符列,能夠如下是任何數據類型CHAR、VARCHAR二、NCHAR、NVARCHAR二、CLOB、NCLOB

pattern是正則表達式,能夠是如下任意數據類型CHAR、VARCHAR二、NCHAR、NVARCHAR2。最多可包含512個字節。若是pattern數據類型與source_char異同,則Oracle將轉換pattern的數據類型與source_char的一致。

replace_string能夠是如下任意數據類型CHAR、VARCHAR二、NCHAR、NVARCHAR二、CLOB、NCLOB。若是replace_string是CLOB或NCLOB,則Oracle截斷replace_string爲32K。replace_string可含有多達500個反向引用做爲子表達式,其形式爲\n,n爲數字1~9。若是n在replace_string中爲反斜線字符,則需使用轉移字符在其前面(\)

position是一個正整數,表示在source_char中Oracle應該開始搜索的字符。默認值爲1,表示Oracle以第一個字符開始搜索。

occurrence是一個非負整數,表示替換動做的發生,若是爲0,則Oracle將替換全部匹配項,若是爲正整數n,則Oracle將替換第n個匹配項。

match_parameter是一個文本文件,用於更改匹配行爲,僅影響匹配過程,並不影響replace_string。能夠指定如下一個或多個值:
‘i’指定不區分大小寫的匹配
‘c’區分大小寫的匹配
‘n’容許‘.’(句點,配置任意字符)匹配換行符,若是省略此此參數,則句點與換行符不匹配
‘m’將源字符串視爲多行。Oracle將源字符串中的^或$視爲行首或行尾,若是省略此參數,Oracle將源字符串視爲單行
‘x’忽略空格字符。默認狀況下,空白字符與自身匹配。
若是指定多個矛盾值,Oracle將使用最後一個值,例如指定’ic’,則Oracle使用區分大小寫匹配,若是指定的不是上述字符,則返回錯誤
若是省略match_parameter,則:
1.默認的區分大小寫由NLS_SORT參數的值決定
2.句點‘.’與換行符不匹配
3.源字符串視爲單行

以上中文內容爲本人自行翻譯,僅供參考

實驗:
如下開始經過實驗驗證各參數功能的使用
簡單使用:
實驗 1:

SQL> select regexp_replace('0123456789','01234','0abc') from dual;


 

實驗 4:

SQL> select regexp_replace('+86 13811112222','(\+[0-9]{2})( )([0-9]{3})([0-9]{4})([0-9]{4})','(\1)\3-\4-\5') as new_str from dual;

  

 

附:正則表達式(POSIX標準擴展正則ERE)

符號 釋義
\ 表明它本身、引用下一個字符、引入一個操做符、什麼也不作
* 匹配零或多個
+ 匹配一個或多個
? 匹配零個或一個
| 或運算,其左右操做數都可覺得一個子表達式
^ 默認狀況下匹配字符串的結尾。在多行模式下,它匹配源字符串中任意位置的行尾
$ 默認狀況下匹配字符串的開頭。在多行模式下,它匹配源字符串中任意位置的行頭
. 匹配字符集中支持的任意字符,NULL除外
[ ] 用於指定匹配列表的括號表達式
( ) 對錶達式進行分組,將其視爲單個子表達式
{m} 剛好匹配m次
{m,} 匹配至少m次
{m,n} 匹配至少m次,但不超過n次
\n 反向引用表達式(n爲1~9)匹配在\n以前的圓括號內包含的第n個子表達式
[. .] 指定排序規則,能夠是多字符元素(例如,西班牙語中的[.ch.])
[: :] 指定字符類(例如,[:alpha:]),它匹配字符類中的任何字符
[= =] 指定等價類。(例如,[=a=]匹配索引具備基本字母a的字符)
https://docs.oracle.com/cd/B19306_01/server.102/b14200/ap_posix001.htm#BABJDBHB
以上資料來源於Oracle官網,由本人自行理解翻譯,如如有誤請指正

[: :]字符類:

[:xxxx:] 含義 範圍
[:space:] 包括換行符、空格、tab在內的空白字符 tab、空格
[:blank:] 空格和tab tab、空格
[:alpha:] 字母 a-z、A-Z
[:alnum:] 字母和數字 a-z、A-Z、0-9
[:digit:] 十進制數 0-9
[:xdigit:] 十六進制數 0-九、a-f、A-F
[:lower:] 小寫字母 a-z
[:upper:] 大寫字母 A-Z
[:cntrl:] 控制字符 ctrl、backspace等
[:punct:] 標點符號 ,.?’

 python機器學習-sklearn挖掘乳腺癌細胞( 博主親自錄製)

網易雲觀看地址

https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share

掃二維碼,關注博主主頁,學習更多Python知識

本站公眾號
   歡迎關注本站公眾號,獲取更多信息