iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
Python

Python和R入門語法比較系列 第 15

08 [R] 用Regular Expression(正規表示法)處理文字 [16th 鐵人 Day 15]

  • 分享至 

  • xImage
  •  

延續【03 more about csv in Python and R】例子

下載song_rank.csv

R

#### 讀檔 ####
# data/song_rank.csv
setwd('/Users/carplee/Desktop/...')
r = read.csv("data/song_rank.csv")

https://ithelp.ithome.com.tw/upload/images/20240822/20162398jEcTxze1Oz.png

r$Song
rS = r$Song

原本的rs:

rs
[1] 青空未來 (Future)                      
 [2] 勇氣 (Courage)                         
 [3] 沒什麼大不了                           
 [4] 我 (feat. 馬佳)                        
 [5] 人間遊戲                               
 [6] 愛情限時批 (Express love letter)       
 [7] 故作完美 (Imperfection)                
 [8] 我們 (《奇蹟》前導片插曲) (Us)         
 [9] 愛在蔓延時 (When Love Being Spread)    
[10] 煙火星辰 (電視劇《你是我的榮耀》片頭曲)
[11] 紅空過去 (past)                        
[12] 放空現在                               
[13] 力量 (strength)                        
[14] 很重要                                 
14 Levels: 人間遊戲 力量 (strength) 勇氣 (Courage) ... 青空未來 (Future)

所有字母(大寫,小寫)都去掉:

gsub(x=rS, pattern = '[a-zA-Z]',replacement = '')
 [1] "青空未來 ()"                            
 [2] "勇氣 ()"                                
 [3] "沒什麼大不了"                           
 [4] "我 (. 馬佳)"                            
 [5] "人間遊戲"                               
 [6] "愛情限時批 (  )"                        
 [7] "故作完美 ()"                            
 [8] "我們 (《奇蹟》前導片插曲) ()"           
 [9] "愛在蔓延時 (   )"                       
[10] "煙火星辰 (電視劇《你是我的榮耀》片頭曲)"
[11] "紅空過去 ()"                            
[12] "放空現在"                               
[13] "力量 ()"                                
[14] "很重要"   

原本的rs:

rs
[1] 青空未來 (Future)                      
 [2] 勇氣 (Courage)                         
 [3] 沒什麼大不了                           
 [4] 我 (feat. 馬佳)                        
 [5] 人間遊戲                               
 [6] 愛情限時批 (Express love letter)       
 [7] 故作完美 (Imperfection)                
 [8] 我們 (《奇蹟》前導片插曲) (Us)         
 [9] 愛在蔓延時 (When Love Being Spread)    
[10] 煙火星辰 (電視劇《你是我的榮耀》片頭曲)
[11] 紅空過去 (past)                        
[12] 放空現在                               
[13] 力量 (strength)                        
[14] 很重要                                 
14 Levels: 人間遊戲 力量 (strength) 勇氣 (Courage) ... 青空未來 (Future)

所有標點符號都去掉:

gsub(x=rS, pattern = '[[:punct:]]',replacement = '')
 [1] "青空未來 Future"                  
 [2] "勇氣 Courage"                     
 [3] "沒什麼大不了"                     
 [4] "我 feat 馬佳"                     
 [5] "人間遊戲"                         
 [6] "愛情限時批 Express love letter"   
 [7] "故作完美 Imperfection"            
 [8] "我們 奇蹟前導片插曲 Us"           
 [9] "愛在蔓延時 When Love Being Spread"
[10] "煙火星辰 電視劇你是我的榮耀片頭曲"
[11] "紅空過去 past"                    
[12] "放空現在"                         
[13] "力量 strength"                    
[14] "很重要"    

原本的rs:

rs
[1] 青空未來 (Future)                      
 [2] 勇氣 (Courage)                         
 [3] 沒什麼大不了                           
 [4] 我 (feat. 馬佳)                        
 [5] 人間遊戲                               
 [6] 愛情限時批 (Express love letter)       
 [7] 故作完美 (Imperfection)                
 [8] 我們 (《奇蹟》前導片插曲) (Us)         
 [9] 愛在蔓延時 (When Love Being Spread)    
[10] 煙火星辰 (電視劇《你是我的榮耀》片頭曲)
[11] 紅空過去 (past)                        
[12] 放空現在                               
[13] 力量 (strength)                        
[14] 很重要                                 
14 Levels: 人間遊戲 力量 (strength) 勇氣 (Courage) ... 青空未來 (Future)

所有字母(小寫,大寫)和標點符號都去掉:

gsub(x=rS, pattern = '[a-zA-Z[:punct:]]',replacement = '')
 [1] "青空未來 "                        
 [2] "勇氣 "                            
 [3] "沒什麼大不了"                     
 [4] "我  馬佳"                         
 [5] "人間遊戲"                         
 [6] "愛情限時批   "                    
 [7] "故作完美 "                        
 [8] "我們 奇蹟前導片插曲 "             
 [9] "愛在蔓延時    "                   
[10] "煙火星辰 電視劇你是我的榮耀片頭曲"
[11] "紅空過去 "                        
[12] "放空現在"                         
[13] "力量 "                            
[14] "很重要"  

原本的rs:

rs
[1] 青空未來 (Future)                      
 [2] 勇氣 (Courage)                         
 [3] 沒什麼大不了                           
 [4] 我 (feat. 馬佳)                        
 [5] 人間遊戲                               
 [6] 愛情限時批 (Express love letter)       
 [7] 故作完美 (Imperfection)                
 [8] 我們 (《奇蹟》前導片插曲) (Us)         
 [9] 愛在蔓延時 (When Love Being Spread)    
[10] 煙火星辰 (電視劇《你是我的榮耀》片頭曲)
[11] 紅空過去 (past)                        
[12] 放空現在                               
[13] 力量 (strength)                        
[14] 很重要                                 
14 Levels: 人間遊戲 力量 (strength) 勇氣 (Courage) ... 青空未來 (Future)

所有字母(小寫,大寫)、標點符號和空格都去掉:

gsub(x=rS, pattern = '[a-zA-Z[:punct:] ]',replacement = '')
 [1] "青空未來"                        
 [2] "勇氣"                            
 [3] "沒什麼大不了"                    
 [4] "我馬佳"                          
 [5] "人間遊戲"                        
 [6] "愛情限時批"                      
 [7] "故作完美"                        
 [8] "我們奇蹟前導片插曲"              
 [9] "愛在蔓延時"                      
[10] "煙火星辰電視劇你是我的榮耀片頭曲"
[11] "紅空過去"                        
[12] "放空現在"                        
[13] "力量"                            
[14] "很重要" 

原本的rs:

rs
[1] 青空未來 (Future)                      
 [2] 勇氣 (Courage)                         
 [3] 沒什麼大不了                           
 [4] 我 (feat. 馬佳)                        
 [5] 人間遊戲                               
 [6] 愛情限時批 (Express love letter)       
 [7] 故作完美 (Imperfection)                
 [8] 我們 (《奇蹟》前導片插曲) (Us)         
 [9] 愛在蔓延時 (When Love Being Spread)    
[10] 煙火星辰 (電視劇《你是我的榮耀》片頭曲)
[11] 紅空過去 (past)                        
[12] 放空現在                               
[13] 力量 (strength)                        
[14] 很重要                                 
14 Levels: 人間遊戲 力量 (strength) 勇氣 (Courage) ... 青空未來 (Future)

所有()括號裡的東西都去掉:

gsub(x=rS, pattern = ' \\(.*\\)',replacement = '') # 二個\\ 才是escape
 [1] "青空未來"     "勇氣"         "沒什麼大不了" "我"          
 [5] "人間遊戲"     "愛情限時批"   "故作完美"     "我們"        
 [9] "愛在蔓延時"   "煙火星辰"     "紅空過去"     "放空現在"    
[13] "力量"         "很重要"

上述「正則表示法」的用法,我們用比較短的資料來看

1. 把 '0123456789a' 數字去掉 方法一


### re ###
# 1
s = '0123456789a'
gsub(x=s, pattern='0123456789', replacement='')
[1] "a"

2. 把 '9365728410a' 數字去掉 方法二

# 2
s = '9365728410a'
gsub(x=s, pattern='9365728410', replacement='')
gsub(x=s, pattern='[0-9]', replacement='')
[1] "a"
[1] "a"

3. 把 'abcdefghij123' 英文字母去掉 方法一、二

# 3
s = 'abcdefghij123'
gsub(x=s, pattern='abcdefghij', replacement='')
gsub(x=s, pattern='[a-j]', replacement='')
[1] "123"
[1] "123"

4. 把 'ABCDEFghij123' 大寫, 小寫英文字母去掉

# 4
s = 'ABCDEFghij123'
gsub(x=s, pattern='[A-Fghi]', replacement='')
[1] "j123"

5. 把 'ABCDEFghij123四五六' 大寫, 小寫英文字母 和 數字 去掉

# 5
s = 'ABCDEFghij123四五六'
gsub(x=s, pattern='[A-Fg-j1-3]', replacement='')
gsub(x=s, pattern='[[:alnum:]]', replacement='') # 字母+數字 alnum
[1] "四五六"
[1] "四五六"

6. 只留歌詞的中文字(魔鏡歌詞、標點符號、空格 都去掉)

# 6
s = '人講這心情,罕罕罕罕較快活; 不通太陰沉,@}| 魔鏡歌詞@ 想著會驚~~ 有人真古意...||'
gsub(x=s, pattern='[魔鏡歌詞[:punct:] ]', replacement='')
[1] "人講這心情罕罕罕罕較快活不通太陰沉想著會驚有人真古意"

7. 除了'a'以外的 都去掉

# 7
s = 'appleeadearj ipjdwekj'
gsub(x=s, pattern='[^a]', replacement='')
[1] "aaa"

本篇 【08 [R] 用Regular Expression(正規表示法)處理文字】

下篇 ## Python

內容預告:

08 [python] 用Regular Expression(正規表示法)處理文字

09 [python] 表格 dataframe.insert插入欄位 和 字串處理 Series.str.split

10 [python] pandas的欄列選擇工具 dataframe.loc[ ]和.iloc[ ]

10 [R] r的dataframe欄列選擇方式

11 [python] 取得欄位位置

11 [R] 取得欄位位置

12 [python] 布林值和表格條件選取

12 [R] 布林值和表格條件選取

13 [Python] 畫長條圖統計

13 [R] 畫長條圖統計


上一篇
07 Python 和 R 的 字串處理 [16th 鐵人 Day 14]
下一篇
08 [python] 用Regular Expression(正規表示法)處理文字 [16th 鐵人 Day 16]
系列文
Python和R入門語法比較30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言