字符串替换涉及到的,最主要的3个内容:stringpatternreplacement,分别对应从哪里去匹配、匹配什么、以及要替换成什么。

举个例子,将下示字符串中的 "Intrahepatic" 替换为 "Extrahepatic":

test = "YES329Intrahepatic RecurrenceNoNONOYESNo123"

sub("Intrahepatic", "Extrahepatic", test)

[1] "YES329Extrahepatic RecurrenceNoNONOYESNo123"

其实就是最简单的,识别一个内容并替换为一个内容!

如果存在多个匹配,如将 test 中所有的 "No" 全部替换为 "no",则需要使用 gsub 函数:

gsub("No", "no", test)

注意,字符串中的 "NO" 并没有被替换,意味着区分大小写!

所以,如果想将所有可能的大小写情况都被纳入替换,需要列举出所有可能并以"|"间隔:

gsub("No|NO|no|nO", "no", test)

或者用"[]"列举出每个字母出现的可能:

gsub("[Nn][Oo]", "no", test)    

即,将多个不同的内容替换成一个相同的内容

其实,本例比较特殊,大小写的问题在 gsub 中设置参数 ignore.case = T 即可:

gsub("No", "no", test, ignore.case = T)

上示部分写法涉及到使用正则表达式。再比如,将字符串中的空格和结尾处的数字替换为"-":

gsub("\\s|\\d+$", "-", test)

[1] "YES329Intrahepatic-RecurrenceNoNONOYESNo-"

更进一步的,我们能否在一句命令中实现多种替换?即,将上示三个替换过程在一句命令中完成!

方法1:简单组合

gsub("Intrahepatic", "Extrahepatic", gsub("[Nn][Oo]", "no", gsub("\\s|\\d+$", "-", test)))

[1] "YES329Extrahepatic-RecurrencenononoYESno-"

以前我会用这种写法,不依赖其他包,简单有效,来几个组几个。但是!随之可读性也会变差,而且总觉得有点冗余,不够智能,只给出对应关系不行吗?

方法2:stringr 包中的 str_replace_all 函数:

p_load(stringr)    # 安装加载stringr

str_replace_all(test, c("Intrahepatic" = "Extrahepatic", "[Nn][Oo]" = "no", "\\s|\\d+$" = "-"))

直接给出替换的对应关系,用"="连接一目了然,代码无冗余,而且把 string 放在第一个参数很舒服啊!

方法3:mgsub包中的 mgsub 函数:

p_load(mgsub)

mgsub(test, c("Intrahepatic", "[Nn][Oo]", "\\s|\\d+$"), c("Extrahepatic", "no", "-"), recycle = T)

这里将 patternreplacement 分开写的设计很人性化, str_replace_all 中就不支持这种写法。

需要注意的是,如果正则配的内容与替换的长度不一致时(如上,"\s" 和 "\\d+$" 同时对应 "-"),需要添加参数 recycle = T,否则报错:

pattern and replacement vectors must be the same length

哦,对了,这个时候你输入test会发现还是替换前的内容,是因为上示的替换均是生成一个新的字符串,所以没赋值就不会覆盖掉之前的test!

哦,还有...新来的小伙伴

如果你在执行 p_load 的时候报错

点这里

vba替换字符串中的字符_R语言 | 字符串替换相关推荐

  1. php 删除字符串里指定字符,php删除字符串中指定字符_php删除字符串

    在做项目时需要对一个字符串进行处理,也就是删除指定的字符,吾爱编程通过这篇文章主要介绍了PHP实现删除字符串中任何字符的函数,涉及php针对字符串的遍历与截取操作技巧,需要的朋友可以参考一下: PHP ...

  2. python删除字符串中重复字符_删除字符串中重复字符python 用CAD怎么画DNA反向

    用CAD怎么画DNA反向平行双螺旋结构绘螺旋线时,用选扭曲,确定顺时针. 画双头螺旋线时,第二根螺旋线底圆起点与第一根螺旋线底圆起点,可用角度分隔如180°.python去除文本中重复的字符串可有可无 ...

  3. c++编写函数实现字符串中指定字符位置插入字符串

    #include <iostream> #include<bits/stdc++.h> using namespace std; //定义一个void函数,有三个参数,分别是s ...

  4. golang字符串类型:遍历字符串中的字符及修改字符串,只能转换为[]byte(字符串不含中文)或[]rune(字符串含中文)

  5. c语言中怎样删除字符串中的字母,删除字符串中的字符(C语言)

    题目: 编程序将给定字符串中指定字符删除.要求删除指定字符后原字符串不能留下空位置,字符串和指定字符均由键盘输入 基本思路 将字符串与要删除的字符进行比较,若为相同字符,则将字符串中的该字符替换为原字 ...

  6. Java删除字符串中指定字符的方法分享

    转自: Java如何删除字符串中指定字符呢? 字符串: 字符串主要用于编程,概念说明.函数解释.用法详述见正文,这里补充一点:字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s=& ...

  7. python中字符串索引_Python字符串的索引与访问字符串中的字符

    字符串是Python中一种非常重要的数据类型.Python字符串是字符的集合,是由单引号.双引号或三引号包裹起来的若干字符的序列.Python字符串中的每个字符使用ASCII或Unicode字符编码, ...

  8. 【STM32】利用 C 语言 strchar() 函数查找字符串中指定字符的位置

    文章目录 字符串中查找字符 strchr() 描述 声明 参数 返回值 字符串分割 strtok() 描述 声明 参数 返回值 自己的函数 字符串中查找字符 strchr() 描述 C 库函数 cha ...

  9. C语言试题四十三之求出ss所指字符串中指定字符的个数,并返回此值。

    1. 题目 请编写一个函数function,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C程序设计科目. ...

最新文章

  1. 技术07期:图计算,让数据间的关系无处可藏【社区分切篇】
  2. 数字图像处理笔记一 - 图像采集(空间分辨率和幅度分辨率)
  3. 图解|2018年度中国科学十大进展
  4. 与老黄的技术对聊总结
  5. 稀疏矩阵的压缩存储的两种策略
  6. 基于matlab的频域辨识,基于Lab VIEW的控制系统频域分析研究
  7. 这份 Pandas 学习教程很不错,可在线运行
  8. 循环序列模型 —— 1.2 数学符号
  9. HTML5中的移动开发框架有哪些?
  10. 高性能WEB开发:DOM编程
  11. BackTrack5 下破解无线
  12. 免费FTP资源(比较全)
  13. 初试hive-创建内表(最简单的表),load加载方式简介
  14. 聊聊ADAMoracle去中心化预言机网络服务介绍
  15. Unity学习 HTC Vive Hi5 2.0
  16. invalid non-printable character U+200D
  17. TypeScript 协变和逆变
  18. 网心科技打造全球首个百万量级节点的边缘云计算网络“星域云”
  19. EndNote参考文献管理与编辑软件
  20. IPMI/BMC 简介和使用

热门文章

  1. ABBYY FineReader 12扫描对页的步骤有哪些
  2. 显示出eclipse文件层次
  3. 无法安装 Microsoft Visual Studio 2010 Service Pack 1
  4. enum是java关键字吗_enum是java关键字吗?
  5. java 性能瓶颈_如何通过 Java 线程堆栈来进行性能瓶颈分析?
  6. elementui表格中tip设置_Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用...
  7. 自动化测试——何为自动化测试,为何自动化测试
  8. html5经纬度 ios,iOS 如何根据经纬度来定位位置(示例代码)
  9. php 命令行 循环,Linux_批处理的循环效果脚本,第一次运行 执行命令工A 第 - phpStudy...
  10. docker mysql 漂移_Centos7系统Docker环境下Mysql部署