R語言_正則表達(dá)式1

1) 常見元字符

代碼 代碼含義
. 匹配除換行符以外的任意字符
\w 匹配字母或數(shù)字或下劃線
\s 匹配任意的空白符
\d 匹配數(shù)字
\b 匹配單詞的開始或結(jié)束(定位符)
^ 匹配字符串的開始(定位符)
$ 匹配字符串的結(jié)束(定位符)

2)\b 匹配首尾位置

library(stringr) 
str_extract_all("a test of capitalizing", "\\b(\\w)")
# [[1]]
# [1] "a" "t" "o" "c"

str_extract_all("a test of capitalizing", "(\\w)\\b")
# [[1]]
# [1] "a" "t" "f" "g"

txt1 <- "capitalizing"
str_extract_all(txt1, "\\b[a-z]")
# [[1]]
# [1] "c"

3) \w 匹配字符串(字母榛斯,數(shù)字奕枢,下劃線)

str_extract_all(txt, "\\w")     
# [[1]]
# [1] "a" "t" "e" "s" "t" "o" "f" "c" "a" "p" "i" "t" "a" "l" "i" "z" "i" "n" "g"

str_extract_all(txt, "(\\w)(\\w)(\\w)") 
# [[1]]
# [1] "tes" "cap" "ita" "liz" "ing"

4) Package stringr

(20220910更新)

函數(shù) 功能說明 R base包對應(yīng)函數(shù)
使用正則表達(dá)式的函數(shù)
str_extract() 提取首個匹配模式的字符 regmatches()
str_extract_all() 提取所有匹配模式的字符 regmatches()
str_locate() 返回首個匹配模式的字符的位置 regexpr()
str_locate_all() 返回所有匹配模式的字符的位置 gregexpr()
str_replace() 替換首個匹配模式 sub()
str_replace_all() 替換所有匹配模式 gsub()
str_split() 按照模式分割字符串 strsplit()
str_split_fixed() 按照模式將字符串分割成指定個數(shù) -
str_detect() 檢測字符是否存在某些指定模式 grepl()
str_count() 返回指定模式出現(xiàn)的次數(shù) -
其他重要函數(shù)
str_sub() 提取指定位置的字符 regmatches()
str_dup() 丟棄指定位置的字符 -
str_length() 返回字符的長度 nchar()
str_pad() 填補(bǔ)字符 -
str_trim() 丟棄填充叹谁,如去掉字符前后的空格 -
str_c() 連接字符 paste(),paste0()

5)Case1: 數(shù)據(jù)拆分

將中括號內(nèi)外的內(nèi)容分別提取出來

head(Bracket)
#[1] "pyrroline-5-carboxylate reductase [EC:1.5.1.2]" "proline dehydrogenase [EC:1.5.-.-]"            
#[3] "tyrosine-protein kinase Etk/Wzc [EC:2.7.10.-]"  "glycosyltransferase EpsD [EC:2.4.-.-]"         
#[5] "glycosyltransferase EpsE [EC:2.4.-.-]"          "glycosyltransferase EpsF [EC:2.4.-.-]"         

hou1 =  str_extract(Bracket, "\\[.*\\]"); head(hou1)
# [1] "[EC:1.5.1.2]"  "[EC:1.5.-.-]"  "[EC:2.7.10.-]" "[EC:2.4.-.-]"  "[EC:2.4.-.-]"  "[EC:2.4.-.-]" 

qian = str_extract(Bracket, "(?<=^)(.*)(?=\\[)"); head(qian)
# [1] "pyrroline-5-carboxylate reductase " "proline dehydrogenase "            
# [3] "tyrosine-protein kinase Etk/Wzc "   "glycosyltransferase EpsD "         
# [5] "glycosyltransferase EpsE "          "glycosyltransferase EpsF "   
      
data = data.frame(annotation = qian, enzyme = hou1); head(data)
#                           annotation        enzyme
# 1 pyrroline-5-carboxylate reductase   [EC:1.5.1.2]
# 2             proline dehydrogenase   [EC:1.5.-.-]
# 3   tyrosine-protein kinase Etk/Wzc  [EC:2.7.10.-]
# 4          glycosyltransferase EpsD   [EC:2.4.-.-]
# 5          glycosyltransferase EpsE   [EC:2.4.-.-]
# 6          glycosyltransferase EpsF   [EC:2.4.-.-]

\color{red}{Note: R里面吹埠, 轉(zhuǎn)義符是兩個反斜杠} \\

6)Case2: 匹配替換

(20220910更新)
某一數(shù)據(jù)框"Trophic.Mode"列,只要字符串中出現(xiàn)"Pathotroph"效扫,就將其重命名為"Pathotroph"康吵,否則保持不變戒幔。

# 函數(shù)grepl + 函數(shù)ifelse 完成替換

> head(FunGuild0903$Trophic.Mode, 15)
 [1] "Symbiotroph"            "Symbiotroph"            "Symbiotroph"            "Symbiotroph"           
 [5] "Symbiotroph"            "Symbiotroph"            "Symbiotroph"            "Symbiotroph"           
 [9] "Symbiotroph"            "Saprotroph-Symbiotroph" "Saprotroph-Symbiotroph" "Saprotroph-Symbiotroph"
[13] "Saprotroph-Symbiotroph" "Saprotroph-Symbiotroph" "Saprotroph"  

> for (i in 1:361) {
+   FunGuild0903$Trophic.Mode[i] <-  ifelse(grepl("Saprotroph", FunGuild0903$Trophic.Mode[i]), 
+                                           "Saprotroph", 
+                                           FunGuild0903$Trophic.Mode[i])
+ }
> head(FunGuild0903$Trophic.Mode, 15)
 [1] "Symbiotroph" "Symbiotroph" "Symbiotroph" "Symbiotroph" "Symbiotroph" "Symbiotroph" "Symbiotroph"
 [8] "Symbiotroph" "Symbiotroph" "Saprotroph"  "Saprotroph"  "Saprotroph"  "Saprotroph"  "Saprotroph" 
[15] "Saprotroph" 

函數(shù)grepl() 的主要參數(shù)如下:

grepl(pattern, x, ignore.case = FALSE, perl = FALSE,
      fixed = FALSE, useBytes = FALSE)

R官方文檔中這樣解釋:grepl returns a logical vector (match or not for each element of x),即grepl返回邏輯判斷值份氧,"pattern"是否匹配到x中元素唯袄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蜗帜,隨后出現(xiàn)的幾起案子越妈,更是在濱河造成了極大的恐慌,老刑警劉巖钮糖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梅掠,死亡現(xiàn)場離奇詭異,居然都是意外死亡店归,警方通過查閱死者的電腦和手機(jī)阎抒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來消痛,“玉大人且叁,你說我怎么就攤上這事≈壬。” “怎么了逞带?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵欺矫,是天一觀的道長。 經(jīng)常有香客問我展氓,道長穆趴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任遇汞,我火速辦了婚禮未妹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘空入。我一直安慰自己络它,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布歪赢。 她就那樣靜靜地躺著化戳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪埋凯。 梳的紋絲不亂的頭發(fā)上迂烁,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天,我揣著相機(jī)與錄音递鹉,去河邊找鬼盟步。 笑死,一個胖子當(dāng)著我的面吹牛躏结,可吹牛的內(nèi)容都是我干的却盘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼媳拴,長吁一口氣:“原來是場噩夢啊……” “哼黄橘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起屈溉,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤塞关,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后子巾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帆赢,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年线梗,在試婚紗的時候發(fā)現(xiàn)自己被綠了椰于。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡仪搔,死狀恐怖瘾婿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤偏陪,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布抢呆,位于F島的核電站,受9級特大地震影響笛谦,放射性物質(zhì)發(fā)生泄漏抱虐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一揪罕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宝泵,春花似錦好啰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至闯捎,卻和暖如春椰弊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瓤鼻。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工秉版, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茬祷。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓清焕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親祭犯。 傳聞我的和親對象是個殘疾皇子秸妥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容