此前在数据处理过程中多次遇到过正则表达式的问题,也没有过多去深究 在此做一定的归纳整理,正则表达式在处理文本时显得很迫切,通俗的理解就是 有些符号约定转义为其它意思,这样才使得正则表达式具备很强大灵活的文本处理能力,下面 用一些示例来说明
## 正则表达式转义字符
#空白元字符 [\b] 回退(并删除)一个字符(backspace)
#\f 换页符
#\n 换行符
#\r 回车符
#\t 制表符(tab)
#\v 垂直制表符
### 匹配数字与非数字
#\d 任何一个数字字符,等价于[0-9]
#\D 任何一个非数字字符,等价于^[0-9]
### 匹配字母\非字母与数字
#\w 任何一个字母数字字符(大小写均可以)或下划线字符(等价于[a-zA-Z0-9])
#\W 任何一个非字母数字或下划线字符(等价于[^a-zA-Z0-9])
### 匹配空白字符
#\s 任何一个空白字符(等价于[\f\n\r\t\v])
#\S 任何一个非空白字符(等价于[^\f\n\r\t\v])
### 特殊字符
#. 可以匹配任何单个的字符字母数字甚至.字符本身。同一个正则表达式允许使用多个.字符。
#\\ 转义字符,如果要匹配就要写成“\\(\\)”
#| 表示可选项,即|前后的表达式任选一个
#^ 取非匹配
#$ 放在句尾,表示一行字符串的结束
#() 提取匹配的字符串,(\\s*)表示连续空格的字符串
#[] 选择方括号中的任意一个(如[0-2]和[012]完全等价,[Rr]负责匹配字母R和r)
#{} 前面的字符或表达式的重复次数。如{5,12}表示重复的次数不能小于5,不能多于12,否则都不#匹配
#* 匹配零个或任意多个字符或字符集合,也可以没有匹配
#+ 匹配一个或多个字符,至少匹配一次
#? 匹配零个或一个字符
text<-c("I love da ke ai tong xue")
text
## [1] "I love da ke ai tong xue"
nchar(text)#计算字符数
## [1] 24
length(text)#元素个数
## [1] 1
#查找含有da组合的单词
grep("[Dd]a",text )#不区分大小写,返回的是位置
## [1] 1
grep("[D]a",text)#大写
## integer(0)
grep("[d]a",text)#小写
## [1] 1
text
## [1] "I love da ke ai tong xue"
x1<-strsplit(text,split = "\\s+")#s表示任意空白字符,+表示至少匹配一次
# 匹配一个或以上的空白字符(括空格、制表符和换行符等分割,第一个\起到转义作用。
unlist(x1)
## [1] "I" "love" "da" "ke" "ai" "tong" "xue"
# 分割空格
x2<-strsplit(text,split=" ")#分割空格
unlist(x2)
## [1] "I" "love" "da" "ke" "ai" "tong" "xue"
# 处处分割
unlist(strsplit(text,split=""))#注意表示空格时的区别
## [1] "I" " " "l" "o" "v" "e" " " "d" "a" " " "k" "e" " " "a" "i" " " "t"
## [18] "o" "n" "g" " " "x" "u" "e"
# strsplit默认支持正则表达式,设定参数fixed=T则不支持正则
x = "asdas\\sasdasd"
strsplit(x,split = "\\s")#匹配空白字符
## [[1]]
## [1] "asdas\\sasdasd"
strsplit(x,split = "\\s",fixed = T)#匹配\\s处分割
## [[1]]
## [1] "asdas" "asdasd"
#strsplit(x,split = "\s")#报错因为没有转义,一个反斜杠是非法的