R语言-正则表达式1

Posted ZhengXixide

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于R语言-正则表达式1的主要内容,如果未能解决你的问题,请参考以下文章

答果子问R语言如何用正则表达式提取特定的字符串

R语言 | 关于正则表达式的两个使用体会

R语言学习13-正则表达式

R语言之正则表达式

通过 Java 正则表达式提取 semver 版本字符串的片段

干货收藏 | R语言之正则表达式