1.准备工作

library(tidyverse)

library(stringr)

2.字符串基础

单引号和双引号没有区别

转义符号\,对于反斜杠和引号需要转义。可是我这里发现了一个问题,理论上

double_quote

理论上没有转义符号的

计算机看到的是这样的

原文说,“如果想要查看字符串的初始内容,可以使用writelines() 函数”,实际上意思应该是去掉转义符号和引号,只显示单纯的转义后的字符串,也就是计算机看到的内容。

洲更大神解答了这个问题:

是的,你看到的带了转义符号,计算机看到的是转义成功的!

几种特殊符号:

符号

意义

\t

制表符

\n

换行

\u00b5

μ

2.1字符串长度

str_length(c("a", "R for data science", NA))

#> [1] 1 18 NA

手动数了一下,发现空格也算一个字符长度。

2.2 字符串组合与拆分

其实我觉得更恰当的说法应该是连接。

str_c("x", "y") #连接两个

#> [1] "xy"

str_c("x", "y", "z")#连接三个

#> [1] "xyz"

str_c("x", "y", sep = ", ")#有分隔符的连接

#> [1] "x, y"

#补充:

str_c(c("x", "y"), collapse = ",")

#对一个向量中的几个字符串进行连接用collapse。

处理NA,str_replace_na()

str_c() 函数是向量化的,它可以自动循环短向量,使得其与最长的向量具有相同的长度。

也就是说,你要连接一个含有c(a,b)和x,就会把a和b拆开,后面各自加上x。

同理前后连接也是一样的:

这段代码我一开始没有看懂

name

time_of_day

birthday

str_c(

"Good ", time_of_day, " ", name,

if (birthday) " and HAPPY BIRTHDAY",

"."

)

#> [1] "Good morning Hadley."

然后把birthday改成了TRUE试试:

name

time_of_day

birthday

str_c(

"Good ", time_of_day, " ", name,

if (birthday) " and HAPPY BIRTHDAY",

"."

)

#>[1] "Good morning Hadley and HAPPY BIRTHDAY."

只要认清birthday是个逻辑值就懂咯,不懂就改改看。

拆分

要想将字符向量合并为字符串,可以使用collapse() 函数:

str_c(c("x", "y", "z"), collapse = ", ")

#> [1] "x, y, z"

2.3 用str_sub() 函数来提取字符串的一部分

x

str_sub(x, 1, 3)

#> [1] "App" "Ban" "Pea"

# 负数表示从后往前数,

str_sub(x, -3, -1)#倒数第三个到倒数第一个字符

#> [1] "ple" "ana" "ear"

#注意,即使字符串过短,str_sub() 函数也不会出错,它将返回尽可能多的字符:

str_sub("a", 1, 5)

#> [1] "a"

2.4 区域设置

蒙在这个题目上的应该不止我自己吧。

意思是不同语言的转换大小写和排序,语言有自己的编码标准ISO 639 ,比如英语是en。

大小写转换

函数

意义

str_to_lower()

大写变小写

str_to_upper()

小写变大写

str_to_title()

首字母大写

想知道什么意思,猜并试试

排序:

英文的排序是a-z这样。其他语言不知道。

x

str_sort(x, locale = "en") # 英语

#> [1] "apple" "banana" "eggplant"

str_sort(x, locale = "haw") # 夏威夷语

#> [1] "apple" "eggplant" "banana"

3.使用正则表达式进行模式匹配

通过str_view() 和str_view_all() 函数来学习正则表达式。这两个函数接受一个字符向量和一个正则表达式,并显示出它们是如何匹配的。

3.1 基础匹配

精确匹配字符串:

x

str_view(x, "an")

用”.”任意字符匹配(除了换行符):

str_view(x, ".a.")

好像是同一个字符串里只匹配一次哦。看banana其实可以匹配到两次

观察细致·洁

需要匹配”.“需要用正则表达式转义:

搜索一个”.”

str_view(c("abc", "a.c", "bef"), "\\.")

中间的反斜杠和“.”连起来表示一个正常的点儿。第一个反斜杠表示匹配。

x

writeLines(x)

#> a\b

str_view(x, "\\\\")

四个反斜杠表示匹配一个普通的反斜杠!

后两个表示一个正常的反斜杠,前两个表示匹配用的正常的反斜杠,啊。

3.3 锚点–以什么开头,或以什么结尾

• ^ 从字符串开头进行匹配。

• $ 从字符串末尾进行匹配。

x

str_view(x, "^a")

str_view(x, "a$")

强制正则表达式匹配一个完整字符串。

x

str_view(x, "apple")

str_view(x, "^apple$")

3.5 字符类与字符选项

符号

意义

\\d

任意数字

\\s

任意空白字符,如空格,制表符和换行符

[abc]

a、b、c

[^abc]

除了a、b、c外的任意字符

|连接两个不同的匹配,用括号使表达更清晰,(类似于加减乘除是否需要加括号,优先级)

str_view(c("grey", "gray"), "gr(e|a)y")

3.7 重复

控制一个模式能匹配多少次

• ?:0 次或1 次。

• +:1 次或多次。

• *:0 次或多次。

x

str_view(x, "CC?")

str_view(x, "CC+")

str_view(x, 'C[LX]+')

注意:这个地方中文书有误,str_view(x, "CC?")匹配到的是两个C,而非三个

精确设置匹配的次数。

• {n}:匹配n 次。

• {n,}:匹配n 次或更多次。

• {,m}:最多匹配m 次。

• {n, m}:匹配n 到m 次。

如果你选的是一个区间,正则表达式会匹配尽量长。在表达式后面加一个?可以改为匹配尽量短。

3.9分组与回溯引用

str_view(fruit, "(..)\\1", match = TRUE)

fruit是个自带的向量,括号表示优先级,\1表示第一组,第一个反斜线表示转义。

(补充:这里看的有点懵,其实就只有一组。如果多组,就是多个括号连写,是带有顺序的,依次表示第1,2,3组)

做了以下尝试:

str_view(fruit, "(..)\\1"),去掉match,只匹配到连续的anan

str_view(fruit, "(.)\\1", match = TRUE)去掉一个点,匹配到了叠字

str_view(fruit, "(.)\\1")去掉match,去掉点,只显示匹配到的所有叠字

微信公众号生信星球同步更新我的文章

morning 是字符串的内容变成good_小洁详解《R数据科学》--第十章 使用stringr处理字符串(上)...相关推荐

  1. Joomla远程代码执行漏洞分析小白版(小宇特详解)

    Joomla远程代码执行漏洞分析小白版(小宇特详解) 今天看了一下2021陇原战役WP,在看web方向的时候,看到pop链,想了解一下,后来又看到了p师傅在15年的一篇文章,在这里记录一下.这里主要是 ...

  2. java中北大学ppt总结+课后习题第四章(小宇特详解)

    java中北大学ppt总结+课后习题第四章(小宇特详解) 继承 子类与父类 继承是根据现有类创建新的类的机制,由继承而得到的新类称为子类(subclass)或派生类(derived class),被继 ...

  3. buuctf-[BSidesCF 2020]Had a bad day(小宇特详解)

    buuctf-[BSidesCF 2020]Had a bad day(小宇特详解) 先看一下题目 这里上面有注入点,这里怀疑是SQL注入 先尝试读取一下index.php 这里使用php伪协议 pa ...

  4. buuctf-[GXYCTF2019]BabySQli WP(小宇特详解)

    buuctf-[GXYCTF2019]BabySQli WP(小宇特详解) 这里先看一下源码 查看search.php 这里先base32解码,然后在base64解码得到 select * from ...

  5. java中北大学ppt总结+课后习题第二章(小宇特详解)

    java中北大学ppt总结+课后习题第二章(小宇特详解) 基本数据类型 Java语言有8种基本数据类型. 逻辑类型:boolean.1字节 整数类型: 1字节整数类型:byte. 2字节整数类型:sh ...

  6. 【C语言】扫雷小游戏详解

    [C语言]扫雷小游戏详解 前言: 还记得大明湖畔的夏雨荷,电脑课上的扫雷吗? ---------------------------是 他 吗--------------------------- 没 ...

  7. nps内网穿透服务器搭建教程(阿里云)-小宇特详解

    nps内网穿透服务器搭建教程(阿里云)-小宇特详解 前期准备 1.一台云服务器 2.配置安全组 3.在自己的电脑上安装nps 云服务器的话自己买,我这里使用的是阿里云 讲一下配置安全组 打开阿里云的官 ...

  8. cc链2(小宇特详解)

    cc链2(小宇特详解) 漏洞环境 jdk8u71 apache commons collection-4.0 与cc链1的区别 cc链2利用链中使用了动态字节码编程来构造poc cc链2没有使用反序列 ...

  9. WordPress标签云小工具详解

    WordPress标签云小工具是WordPress程序自带的一个小工具,它可以在我们的博客侧边栏展示网站的标签列表.今天WordPress小工具详解系列就从WordPress标签云小工具开始.带大家熟 ...

  10. buuctf-[GYCTF2020]Blacklist1(小宇特详解)

    buuctf-[GYCTF2020]Blacklist1(小宇特详解) 1.先看题目是一道sql注入的题目 先尝试进行闭合 payload:1' 这里可以试出来是'来进行闭合即可 2.然后尝试着进行联 ...

最新文章

  1. 机器学习笔记: 聚类 模糊聚类与模糊层次聚类(论文笔记 Fuzzy Agglomerative Clustering :ICAISC 2015)
  2. Hadoop-rpc调用案例,服务端,客户端代码案例
  3. 阿里云rds升级mysql8_为更强大而生的开源关系型数据库来了!阿里云RDS for MySQL 8.0 正式上线!...
  4. ideahtml标签不提示_仓储物流加速,电子标签亮灯拣选系统的优势
  5. 努比亚红魔3开启预约:鲁大师跑分破47万
  6. 小心SAP环境中的8大安全错误!快来对照、改正!
  7. extend 和 append 的区别
  8. Poj2823 单调队列
  9. Web SQL本地数据库(SQLLite)
  10. 【PLC】PLCPAC入门教程
  11. 阿里云开发者藏品计划【阿里云飞天5K纪念碑】
  12. python中label组件参数_【Python64-tkinter_label组件】
  13. 2020 年博客总结
  14. 2023最新最新ChatGPT超全面从基础到实战视频教程/有兴趣自己学
  15. 如何在分割视频的基础上,分离视频中的音频
  16. 蒙特卡洛随机模拟的MATLAB实例解析纪录
  17. 使用Post不传Body,出现socket hang up报错
  18. js数据过滤算法搭建
  19. javascript Array系列函数之14:every函数
  20. 19个极度冷门发大财职业

热门文章

  1. 辽宁大学计算机专科专业,2020辽宁大学计算机考研专业课调整
  2. 发动机启动计算机,不自检直接启动伤车?看完发动机电脑自检原理你就明白了...
  3. 携程python面试题_Python求解啤酒问题(携程2016笔试题)
  4. dialog 弹窗关闭事件
  5. 唐福林《新浪微博开放平台中的Redis实践》演讲视频
  6. 恭喜这2所高校,喜提“电子土豆大学”“四川土豆大学”称号
  7. 电脑卡住了怎么保存excel_电脑卡死了excel没保存怎么办啊
  8. Multisim基础 桥式整流二极管电路
  9. css背景颜色如何铺满屏幕
  10. Mac密码管理——忘记了Mac开机密码怎么办?如何找回或者重置密码?