有条件地将可选组替换为 gsub

2024-05-09

一位用户问我如何做到这一点如何使 ggplot 图例中的选定单词变为斜体? https://stackoverflow.com/questions/76054997/how-to-italicize-select-words-in-a-ggplot-legend/76055093?noredirect=1#comment134133550_76055093,并且我对我的解决方法不满意。

目的是在除给定字符串之外的所有字符向量元素周围添加封闭的 *。对于这个例子,我们假设这些总是在开头找到。我对第一组使用可选捕获,然后将第二组包含在星号中。当搜索的单词单独存在并且没有后续字符串时,就会出现问题。

我已在代码中包含了所需的输出和一些尝试。

v <- head(rownames(mtcars))
## does also not work with (.*)?, nor with (.+) nor (.+)?
gsub("(Hornet |Valiant)?(.*)", "\\1\\*\\2\\*", v) 
#> [1] "*Mazda RX4*"         "*Mazda RX4 Wag*"     "*Datsun 710*"       
#> [4] "Hornet *4 Drive*"    "Hornet *Sportabout*" "Valiant**"

## desired output
ifelse(grepl("Valiant", v), v, gsub("(Hornet )?(.*)", "\\1\\*\\2\\*", v) )
#> [1] "*Mazda RX4*"         "*Mazda RX4 Wag*"     "*Datsun 710*"       
#> [4] "Hornet *4 Drive*"    "Hornet *Sportabout*" "Valiant"

两个正则表达式引擎都不能与gsub支持条件替换模式。

您可以使用

v <- c("Mazda RX4","Mazda RX4 Wag","Datsun 710","Hornet 4 Drive","Hornet Sportabout","Valiant")
gsub("^(?:Hornet|Valiant)\\s*(*SKIP)(*F)|(.+)", "*\\1*", v, perl=TRUE)

See the 正则表达式演示 https://regex101.com/r/pQNNPm/1R 在线演示 https://ideone.com/oqzoki.

Output:

[1] "*Mazda RX4*"         "*Mazda RX4 Wag*"     "*Datsun 710*"       
[4] "Hornet *4 Drive*"    "Hornet *Sportabout*" "Valiant"   

为了确保第一个单词作为整个单词匹配,添加\b: "^(?:Hornet|Valiant)\\b\\s*(*SKIP)(*F)|(.+)".

确保使用perl=TRUE.

正则表达式详细信息:

  • ^(?:Hornet|Valiant)\s*(*SKIP)(*F)- 匹配Hornet or Valiant在字符串的开头,然后是零个或多个空格,一旦匹配,则丢弃并使匹配失败,并继续从失败位置查找下一个匹配
  • | - or
  • (.+)- 尽可能多地匹配除换行符之外的一个或多个字符(字符串的其余部分)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有条件地将可选组替换为 gsub 的相关文章

  • 如何根据查找表匹配多列

    我有以下两个数据框 lookup lt data frame id c A B C price c 1 2 3 results lt data frame price 1 c 2 2 1 price 2 c 3 1 1 我现在想要浏览所有列
  • 绘制带有颜色渐变的geom_segment线? (或者还有另一种方法来强调开始与结束吗?)

    我的数据框中有大量行 100 000 的两组纬度和经度变量 我正在尝试绘制一个连接这两组坐标的图 即 从纬度1 经度1 to 纬度2 经度2 使用 geom segment 使用非常低的 alpha 使线条透明 因为线条太多 我想强调这些线
  • 求解非线性方程组

    我正在尝试求解以下四个方程组 我尝试过使用 rootSolve 包 但似乎我无法通过这种方式找到解决方案 我正在使用的代码如下 model lt function x F1 lt sqrt x 1 2 x 3 2 1 F2 lt sqrt
  • 如何处理包内部的 R 数据?

    我正在开发的 R 包需要多个 R 数据对象 例如预先计算的模型和参数 目前 我将包的 数据 目录中的每个对象放在单独的 RData 文件中 使用该包时 用户可以使用 数据 功能将这些对象附加到他们的环境中 我想要的行为是 在加载包时 数据对
  • 使用插入符和方法 = gamLoess 进行训练时 R 崩溃

    当我运行下面的代码时 R 崩溃了 如果我在训练调用中注释掉tuneGrid行 就不会发生崩溃 我已经用另一个数据集尝试过此操作 但仍然使 R 崩溃 崩溃消息是 R 会话中止 R遇到致命错误 会话被终止 开始新会话 代码是 library s
  • 当在另一行中找到元素逗号分隔时合并行

    您好 我有一个数据框 例如 species family Events groups 1 SP1 A 10 22 G1 2 SP1 B 7 G2 3 SP1 C D 4 5 6 1 3 G3 G4 G5 G6 4 SP2 A 22 10 G
  • DT数据表中的列对齐

    In my shiny我正在使用的应用程序datatable函数来自DT库构建一个表格并希望将列居中对齐 我可以用formatStyle column textAlign center 但它只影响列体而不影响标题 我们必须设置columnD
  • R - 如何为数据范围内的缺失值绘制条形图零点?

    假设我对 1 到 10 之间的整数的 200 个点有 10 个观察值 mysample sample rep seq 1 10 20 10 我想用条形图绘制它 barplot table mysample barplot https i s
  • 单击 R Shiny 中的按钮后将输入字段重置为 null

    我正在构建一个应用程序 用户可以在其中按列输入表的数据值 单击 添加 按钮后 输入的值将按列附加到现有值 例如 如果输入 col1 2 3 并单击 ADD 我们将在显示屏中看到 col1 2 3 如果输入 col2 4 7 并单击 ADD
  • 在 ggplot2 上绘制世界地图

    我一直在尝试在 ggplot2 上绘制世界地图 我跟踪了电子邮件的线索 带 l 的 ggplot 地图 https stackoverflow com questions 9558040 ggplot map with l但我确实遇到了同样
  • 如何匹配单引号字符串中的双反斜杠?

    我需要区分带有单反斜杠和双反斜杠的字符串 Perl 对它们一视同仁 print n qqq www eee rrr print n qqq www eee rrr 将给出相同的结果 qqq www eee rrr qqq www eee r
  • rollapply用于累积窗口[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我试图弄清楚如何在数据窗口上使用 R rollapply 该窗口从数据的开头累积扩展 在时间 t 滚动应用应使用 1 t
  • 如何更新 R 中的包?

    我想将一个 R 包升级到已经可用的新版本 我试过 update packages c R2jags 但它什么也没做 控制台上没有输出 没有错误 什么也没有 我使用了相同的语法install packages但也许我做错了什么 我一直在看 u
  • R:行数不相等的列绑定

    我有两个数据集 它们每个都有变量 ID Block 和 RT 反应时间 我想合并 列绑定这两个集合 以便我拥有一个包含变量的数据集 ID 块 RT1 RT2 问题是两个集合中的行数不相等 此外 ID 和块号匹配也很重要 缺失值应替换为 NA
  • 在 r 中的字符串内循环以输出具有向量化值的表达式

    示例数据 gt DF A B C 1 11 22 88 2 11 22 47 3 2 30 21 4 3 30 21 gt r 1 A A i B B i A A i C C i 3 B B i C C i A A i B B i C C
  • 正则表达式从 img 标签获取 src 值

    我正在使用以下正则表达式来获取src第一个的值imgHTML 文档中的标签 string match src
  • 在 Travis 上使用 devtools 安装 R 包时遇到问题

    Travis CI 构建于drakeR包手册 https github com ropenscilabs drake manual 最近开始失败 https travis ci org ropenscilabs drake manual b
  • 将其他数据集的点添加到ggplot2

    关于这个主题已经有很多问题 但我找不到能回答我的具体问题的问题 我有一个barplot see testplot1 and testplot3如下 绘制数据集 bardata如下 并希望从另一个数据集向其添加点 pointdata 请参阅简
  • geom_polygon 的渐变填充

    此代码生成一个包含 3 个多边形的图表 我正在创建一个显示 3 个多边形的图表 如果有更好的方法来绘制多边形 我不太感兴趣 实际上这些多边形代表事件 并且这些事件有一个持续时间 首先 我感兴趣的是使用渐变填充每个多边形的可能性 librar
  • 正则表达式提取大括号之间的文本

    我正在尝试提取 PHP 中花括号之间的文本 例如 欢迎 user first name 使用 site 版本 1 5 您的用户名 是 user username 您目前的声誉是 user reputation name 我用过 在某些情况下

随机推荐