理解正则表达式
此前在数据处理过程中多次遇到过正则表达式的问题,也没有过多去深究
在此做一定的归纳整理,正则表达式在处理文本时显得很迫切,通俗的理解就是
有些符号约定转义为其它意思,这样才使得正则表达式具备很强大灵活的文本处理能力,下面
用一些示例来说明
正则表达式转义字符
空白元字符 [\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,否则都不#匹配
* 匹配零个或任意多个字符或字符集合,也可以没有匹配
+ 匹配一个或多个字符,至少匹配一次
? 匹配零个或一个字符
应用举例
Example-1
text<-c("I love da ke ai tong xue")
text
nchar(text)#计算字符数
length(text)#元素个数
#查找含有da组合的单词
grep("[Dd]a",text )#不区分大小写,返回的是位置
grep("[D]a",text)#大写
grep("[d]a",text)#小写
Example-2
strsplit()函数用于字符串分割,其中split是分割参数。所得结果以默认以list形式展示
text
x1<-strsplit(text,split = "\\s+")#s表示任意空白字符,+表示至少匹配一次
# 匹配一个或以上的空白字符(括空格、制表符和换行符等分割,第一个\起到转义作用。
unlist(x1)
# 分割空格
x2<-strsplit(text,split=" ")#分割空格
unlist(x2)
# 处处分割
unlist(strsplit(text,split=""))#注意表示空格时的区别
# strsplit默认支持正则表达式,设定参数fixed=T则不支持正则
x = "asdas\\sasdasd"
strsplit(x,split = "\\s")#匹配空白字符
strsplit(x,split = "\\s",fixed = T)#匹配\\s处分割
#strsplit(x,split = "\s")#报错因为没有转义,一个反斜杠是非法的








网友评论