R語言的正則表達式主要用來處理文本資料,比如進行查找、替換等等。
首先是一些處理文本時會用到的函數:
字符串分割:strsplit()
字符串連接:paste(),paste0()
計算字符串長度:nchar(),length()
字符串截取:substr(),substring()
查看是否存在某個字符:grep(p,x) <返回匹配到的元素的下標(位置),p是一個正則表達式
grepl(p,x)<返回邏輯值false or true
舉個栗子:
s<-c("123abc\\456","abc123edf") grep("123",s) #匹配“123"的位置,返回元素的下標 grepl("xcd",s)#”123“是否匹配成功,返回邏輯值
> grep("123",s) [1] 1 2 > grepl("xcd",s) [1] FALSE FALSE
字符替換:sub(p,replace,x) <對查找到的第一個字符進行替換
gsub(p,replace,x) <對查找到的所有內容進行替換
eg:
s1<-c("123edf123") sub("123","sss",s1) #替換s1里"123"為“sss",注意:找到即停止 gsub("123","sss",s1) #對找到的所有內容進行替換
> sub("123","sss",s1) [1] "sssedf123" > gsub("123","sss",s1) [1] "sssedfsss"
____________________________________________________________________
下面介紹R語言里的正則表達式
直接用例子說明問題:
1、\d 是否匹配到任意一個數字
s3<-c("123abc\\456","abc123\\def123","") grepl("\\d",s3) #是否匹配到任意一個數字
[1] TRUE TRUE
#等價於: grepl("[0-9]",s3)
2、\D是否匹配到任意一個非數字
grepl("\\D",s3) #是否匹配到任意一個非數字 #等價於: grepl("[^0-9]",s3) #^表示邏輯非
3、\w是否匹配到任何一個數字、字母、下划線
grepl("\\w",s3) #是否匹配到任何一個數字、字母、下划線 等價於: grepl("[a-zA-Z0-9]",s3)
4、\W是否匹配到任何一個非數字、字母、下划線
grepl("\\W",s3)
5、\\ 轉義
grepl("\\\\",s3) #是否匹配到\\
6、. 是否匹配到任意字符
grepl (".",s3)
7、| 表示或
grepl("56|ab",s) #是否匹配到“56”或“ab"
8、^
grepl("^a",s3) #是否以a開頭
9、$
grepl("6$",s3) #是否以6結尾
10、()
grepl("abc(.+)456",s3) #"abc"和"456"之間是否存在任意(.)大於等於1個(+)字符
11、[ ]
grepl("[123,456]",s3) #等價於: grepl("123|456",s3)
12、{ }
grepl("[def]{2}",s3) #"def"是否出現了不超過3次
13、*
grepl(".*",s3) #任意字符是否匹配0次以上,肯定返回true啦(包括空格)
14、+
grepl(".+",s3) #任意字符至少能匹配一次,空格返回FALSE
15、?
grepl("[456]?",s3) #匹配0次為true,匹配1次也為true
