測試環境為 CentSO 8 (虛擬機)
在 Python 可以透過 re 模組來使用 Regular Expression (正規表達式) 來處理資料, 常用的 re 函數請參考 – https://benjr.tw/105370 , 這邊來看一下常用 Regular Expression 語法.
[root@localhost ~]# python3 Python 3.6.8 (default, Sep 10 2021, 09:13:53) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import re
正規表示式字元可以使用下面的的特殊符號來表示:
- ^ 表示匹配的字元串在行首.
下面範例用來剔除字串前的空白字元 (\s) , + 表示 “重複” 一個到無窮多個的字元.>>> re.sub('^\s+' ,'' , ' This is a book ' ); 'This is a book '
- $ 表示匹配的字元串在行尾.
下面範例用來剔除字串後的空白字元.(\s) , + 表示 “重複” 一個到無窮多個的字元.>>> re.sub('\s+$' ,'' , ' This is a book ' ); ' This is a book'
- . 表示為任一字元.
- * 表示 “重複” 零個到無窮多個的字元.
- + 表示 “重複” 一個到無窮多個的字元.
下面範例用來剔除 HTML 語法的標籤(TAG).>>> re.sub("<.+>",'' , "<h2 title=I'm a header>The title Attribute</h2>"); ''
.+
. 表示為任一字元 , + 表示 “重複” 一個到無窮多個的字元. - ? 表示 “重複” 零個到一個的字元.
下面範例用來剔除 HTML 語法的標籤(TAG).>>> re.sub("<.+?>",'' , "<h2 title=I'm a header>The title Attribute</h2>"); 'The title Attribute'
.+?
. 表示為任一字元. + 表示 “重複” 一個到無窮多個的字元 , ? 表示 “重複” 零個到一個的字元..+ 與 .+? 使用上不同.
- .+ 找出盡可能多的字元,上面的範例.
<.+> 會找出盡可能多的字元 以 < 為開頭 ,以 > 為結尾 ,結果就是找到 <h2 title=I’m a header>The title Attribute</h2> 一整個字串. - .+? 找出盡可能少的字元,上面的範例.
<.+?> 會找出盡可能少的字元 以 < 為開頭 ,以 > 為結尾 ,結果就是找到 <h2 title=I’m a header>與 </h2> 兩個字串.
- .+ 找出盡可能多的字元,上面的範例.
- A|B , (A|B) 可以是 A 或是 B.
A|B 表示 A 與 B 都會被取代.>>> re.sub("A|C|B" , '' , "ABCDEF"); 'DEF'
- {n} 配對次數 n 次(須為整數).
- [ ] 包含 [ ] 內的任一字元,可以使用 [0-9] 代表從數字 0-9 , 或是 [a-z].
- {n,m} 配對次數從 n 到 m 次(皆須為整數,n 需小於等於 m , n<=m).
- [^ ] 不包含 [ ] 內的任一字元.
以下範例用來取代掉非數字(只保留數字).>>> re.sub( '[^0-9]+' , '' , '0988-123456'); '0988123456'
以下範例用來取代掉非數字與.小點數 (只保留數字與小數點).
>>> re.sub( '[^0-9 , .]+', '' , 'PI=3.1415'); '3.1415' >>> re.sub( '[^0-9 , ^.]+', '' , 'PI=3.1415' ); '3.1415'
- \d 符合一個數字(digit) 字元.
- \D 符合一個非數字(non-digit) 字元.
- \w 符合一個英文(word) 字元.
- \W 符合一個非英文(non-word) 字元.
- \s 符合一個空白(white-space) 字元.
- \S 符合一個非空白(non-white-space) 字元.
- () 表示將字串(表達式 : sub-expression) 分組為一個子字串 (子表達式 : sub-expression),搭配 \N 來使用.
- \N (實際需使用 \\N) N 須為 1~9 間的數字,代表在字串中找到的第 N個匹配的子字串 (sub-expression).
下面範例用來將字串(名 姓)轉換成為(姓, 名).>>> re.sub( '^(.*) (.*)$','\\2, \\1' , 'Chris Hemsworth' ); 'Hemsworth, Chris'
^(.*) (.*)$ 與 \\2, \\1
- ^ 表示匹配的字元串在行首.
- $ 表示匹配的字元串在行尾.
- . 表示為任一字元.
- * 表示 “重複” 零個到無窮多個的字元.
.* 表示為任意字元. - () 表示將字串(表達式 : sub-expression) 分組為一個子字串 (子表達式 : sub-expression),搭配 \N 來使用.
- \N (實際需使用 \\N) N 須為 1~9 間的數字,代表在字串中找到的第 N個匹配的子字串 (sub-expression).
沒有解決問題,試試搜尋本站其他內容