R语言-正则表达式与字符串处理函数

### 6.5 正则表达式与字符串处理函数
#对网页HTML完成下载解析:
#利用R中的RCurl组件或Python中的BeautifulSoup库
#HTML/XML专用工具XPath表达式
#正则表达式:更为通用、更加底层的文本信息提取工具
#正则表达式:使用一个字符串来描述、匹配一系列某个语法规则
#通过特定的字母、数字以及特殊符号的灵活组合即可完成对任意字符串的匹配,从而达到提取相应文本信息的目的
#R默认的正则表达式:基础文本处理函数,stringr包中的文本处理函数
#Perl正则表达式
##6.5.1 基本的正则表达式语法
#邮箱账户的正则表达式:
[A-Za-z0-9\._+]+@[A-Za-z0-9]+\.(com|org|edu|net)
#[A-Za-z0-9\._+]
#"A-Z"表示匹配任意的A~Z大写字母,所有可能的组合放在中括号里表示可以匹配其中的任一个;
#加号表示任意字符可以出现一次或者多次;
#“\”表示转义,因为“."在正则表达式中有特殊含义,想要正常地表示”."号必须使用转义符
#@是邮箱必需的一个符号
#@符号后必须有一个包含运营商信息的字符串
#\.表示邮箱地址中必须要有的一个点号
#(com|org|edu|net)列出邮箱地址可能的域名系统,括号内表示分组处理,“|”符号表示“或”的含义
#正则表达式速查表,page325
#6.5.2 R中正则表达式的使用方法
#文本处理函数 
#基础文本处理函数|stringr包处理函数|含义
#支持正则表达式的函数
#Regmatches() str_extract() 提取匹配特征的第一个字符串
#regmatches() str_extract_all() 提取匹配特征的所有字符串
#regexpr() str_locate() 返回一个特征匹配的位置
#gregexpr() str_locate_all() 返回所有特征匹配的位置
#sub() str_replace() 替换第一个特征的匹配
#gsub() str_replace_all() 替换所有特征的匹配
#strsplit() str_split() 在特征匹配的位置拆分字符串
#           str_split_fixed() 将字符串拆分为固定块数
#grepl() str_detect() 在字符串里检验特征是否存在
#        str_count() 检验特征出现的次数
#其他函数
#regmatches() str_sub() 根据位置提取字符串
#             str_dup() 复制字符串
#nchr() str_length() 返回字符串长度
#       str_pad() 给字符串留空
#       str_trim() 去掉字符串两端的空白
#paste/paste0() str_c() 拼接多个字符串
#例:
#基础字符处理函数的正则表达式应用
example_text1 = c("2333#RRR#PP", "3555#CCCC", "ziyan2021")
#以#进行字符串切分
unlist(strsplit(example_text1, "#"))
#[1] "2333"      "RRR"       "PP"        "3555"      "CCCC"      "ziyan2021"
#以空字符集进行字符串切分
unlist(strsplit(example_text1, "//s"))
#[1] "2333#RRR#PP" "3555#CCCC"   "ziyan2021" 
#以空字符替换字符串第一个#匹配
sub("#", "", example_text1)
#[1] "2333RRR#PP" "3555CCCC"   "ziyan2021" 
#以空字符替換字符串全部#匹配
gsub("#", "", example_text1)
#[1] "2333RRRPP" "3555CCCC"  "ziyan2021"
#查詢字符串中是否存在333或555的特征并返回所在位置
grep("[35]{3}", example_text1)
#[1] 1 2
#查詢字符串中是否存在333或555的特征并返回逻辑值
grepl("[35]{3}", example_text1)
#[1]  TRUE  TRUE FALSE
#例:
#stringr包函数的正则表达式应用
example_text2 = "1. A small sentence. -2. Another tint sentence."
#install.packages(stringr)
library(stringr)
#提取samll特征字符
str_extract(example_text2, "small")
##[1] "small"
# 提取包含sentence特征的全部字符串
unlist(str_extract_all(example_text2, "sentence"))
##  [1] "sentence" "sentence"
# 提取以1开始的字符串
str_extract(example_text2, "^1")
##  [1] "1"
# 提取以句号结尾的字符
unlist(str_extract_all(example_text2, ".$"))
##  [1] "."
# 提取包含tiny或者sentence特征的字符串
unlist(str_extract_all(example_text2, "tiny|sentence"))
##  [1] "sentence" "tiny"     "sentence"
# 点号进行模糊匹配
str_extract(example_text2, "sm.ll")
##  [1] "small"
# 中括号表示可选字符串
str_extract(example_text2, "sm[abc]ll")
##  [1] "small"
str_extract(example_text2, "sm[a-p]ll")
##  [1] "small"
#R中的字符集
[:digit:] 数字:0 ~9
[:lower:] 小写字母a~z
[:upper:] 大写字母A~Z
[:alpha:] 字母字符a~z A~Z
[:alnum:] 数字和字母字符
[:punct:] 标点符号集
[:graph:] 图形字符包括[:alnum:]和[:punct:]
[:blank:] 空格字符:空格和制表
[:space:] 空字符:空格、制表、换行和其他空字符
[:print:] 可打印字符:[:alnum:] [:punct:][:space:]
#R中正则表达式的简化形式
\w 单词字符:[[:alnum:]_]
\W 非单词字符:[^[:almun:]_]
\s 空字符:[[:blank:]]
\S 非空字符:[^[:blank:]]
\d 数字:[[:digit:]]
\D 非数字:[^[:digit:]]
\b 单词边界
\B 非单词边界
\< 单词的起始
\> 单词的结尾
#例:
# 提取全部单词字符
unlist(str_extract_all(example_text2, "\\w+"))
##  [1] "1"        "A"        "small"    "sentence" "2"        "Another" 
##  [7] "tiny"     "sentence"
#网络数据爬取的三种信息提取方式:
#正则表达式、XPath表达式和CSS选择器

你可能感兴趣的:(R,正则表达式,开发语言,r语言)