文本挖掘|你好,正则表达式!

时间:2022-07-22
本文章向大家介绍文本挖掘|你好,正则表达式!,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一串字符中提取英文?

文本信息: “Ta说群众笑脸smile是最好的扶贫成绩单1234”,按照以往的思路是知道英文字符在文本中的起始位置与终止位置,再根据位置提取出来。当数据量小的时候,这种思路操作是没什么毛病的,但是,当数据量大时,显然这种方法又土又麻烦。

当使用正则表达式时,这个问题好解决多了。采用ringr 包中的 str_extract_all 函数对字符对象x按照“[A-z]”抽取规则进行抽取,最终将字符中的所有大小写英文都提取出来了。

> library(stringr)
> x<-' Ta说群众笑脸smile是最好的扶贫成绩单1234 '
> str_extract_all(x,'[A-z]') [[1]]
[1] "T" "a" "s" "m" "i" "l" "e"

正则表达式还可以处理更复杂的字符形式,比如匹配电子邮箱格式。

> eg<-c('abc@sina.com','add@piilgu','lxl@163.cn','9157@qq.com')
> pattern<-'[A-z0-9]+@[A-z0-9]+\.(com|cn)'
> gsub(pattern,'*',eg)
[1] "*"          "add@piilgu" "*"          "*"   

pattern正则表达式含义为:大小写字母或数字(一个或多个)@大小写字符与数字(一个或多个).com 或 cn 。

1、匹配数字

> x<-' Ta说群众笑脸smile是最好的扶贫成绩单1234 '
> gsub('[0-9]','*',x)
[1] " Ta说群众笑脸smile是最好的扶贫成绩单**** "

2、匹配英文

[A-z]”匹配大小写英文,“[A-Z]”匹配大写英文,“[a-z]”匹配小写英文
> x<-' Ta说群众笑脸smile是最好的扶贫成绩单1234 '
> gsub('[a-z]','*',x)
[1] " T*说群众笑脸*****是最好的扶贫成绩单1234 "

3、匹配汉字

 “[u4E00-u9FA5]”机械匹配汉字
> x<-' Ta说群众笑脸smile是最好的扶贫成绩单1234 '
> gsub('[u4E00-u9FA5]','*',x)
[1] " Ta*****smile*********1234 "

4、多条件匹配

> x<-' Ta说群众笑脸smile是最好的扶贫成绩单1234 '
> gsub('[A-Z0-9u4E00-u9FA5]','*',x)
[1] " *a*****smile************* "

5、轮流匹配

使用|代表或条件
> x<-' Ta说群众笑脸smile是最好的扶贫成绩单1234 '
> gsub('([a-z]|[0-9]|[u4E00-u9FA5])','*',x)
[1] " T************************ "

6、“非”的使用

以“^”符号表示“非”
> x<-' Ta说群众笑脸smile是最好的扶贫成绩单1234 '
> gsub('[^u4E00-u9FA5]','*',x)
[1] "***说群众笑脸*****是最好的扶贫成绩单*****"

7、寻找字符串模式

匹配带有任意数字(部分匹配)的字符串

> y<-c("Abu", "a123", "1346", "5")
> grep("\d", y)
[1] 2 3 4

\d包含"^"和"$", 匹配只有一个数字的字符串

> y<-c("Abu", "a123", "1346", "5")
> grep("^\d$", y)
[1] 4

那么如何使用分组提取数据并自定义读取数据呢?