R語言-正則表達式1


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM