R语言-正则表达式1

时间:2023-03-10 06:18:13
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("",s) #匹配“"的位置,返回元素的下标
grepl("xcd",s)#”“是否匹配成功,返回逻辑值
> grep("",s)
[]
> grepl("xcd",s)
[] FALSE FALSE

字符替换:sub(p,replace,x) <对查找到的第一个字符进行替换

     gsub(p,replace,x) <对查找到的所有内容进行替换

eg:

s1<-c("123edf123")
sub("","sss",s1) #替换s1里""为“sss",注意:找到即停止
gsub("","sss",s1) #对找到的所有内容进行替换
> sub("","sss",s1)
[] "sssedf123"
> gsub("","sss",s1)
[] "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) #是否匹配到“”或“ab"

8、^

grepl("^a",s3) #是否以a开头

9、$

grepl("6$",s3) #是否以6结尾

10、()

grepl("abc(.+)456",s3)  #"abc"和""之间是否存在任意(.)大于等于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