我对regex比较陌生,所以如果这个问题微不足道,请原谅我.我想使用正则表达式在字符串的每个字母之间加一个逗号,例如:

x <- "ABCD"

我想要得到

"A,B,C,D"

如果我可以使用gsubsub或相关函数对任意数量字符的字符串进行向量运算,那就太好了.

我试过了

> sub("(\\w)", "\\1,", x)
[1] "A,BCD"
> gsub("(\\w)", "\\1,", x)
[1] "A,B,C,D,"
> gsub("(\\w)(\\w{1})$", "\\1,\\2", x)
[1] "ABC,D"

推荐答案

您可以使用

> gsub("(.)(?=.)", "\\1,", x, perl=TRUE)
[1] "A,B,C,D"

(.)(?=.)正则表达式匹配将其捕获到组1中的任何字符(带有(.)),后面必须跟任何单个字符((?=.))是一个正向先行,它需要一个字符紧靠当前位置的右侧).

解决方案的变化:

> gsub("(.)(?!$)", "\\1,", x, perl=TRUE)
## Or with stringr:
## stringr::str_replace_all(x, "(.)(?!$)", "\\1,")
[1] "A,B,C,D"

在这里,如果字符串位置结束,则(?!$)将导致匹配失败.

请参阅R demo online:

x <- "ABCD"
gsub("(.)(?=.)", "\\1,", x, perl=TRUE)
# => [1] "A,B,C,D"
gsub("(.)(?!$)", "\\1,", x, perl=TRUE)
# => [1] "A,B,C,D"
stringr::str_replace_all(x, "(.)(?!$)", "\\1,")
# => [1] "A,B,C,D"

R相关问答推荐

如何在ggplot 2线性图的每个方面显示每个组的误差条?

R中具有gggplot 2的Likert图,具有不同的排名水平和显示百分比

次级y轴R gggplot2

删除列表中存储的数据帧内和数据帧之间的重复行

自动变更列表

如何在Chart_Series()中更改轴值的 colored颜色 ?

提取具有连续零值的行,如果它们前面有R中的有效值

标识R中多个列中缺少的唯一值

如何通过判断数据框的一列来压缩另一列?

R:从geom_ol()中删除轮廓并导出为pdf

使用rvest从多个页面抓取时避免404错误

从R中的对数正态分布生成随机数的正确方法

基于数据集属性将科分配给物种

从R中发出的咕噜声中的BUG?

如何在R中使用混合GAM模型只对固定的影响因素进行适当的预测?

向R中的数据帧添加一列,该列统计另一列中每个唯一值的二进制观测值的数量

网络抓取新闻标题和时间

ggplot斜体轴刻度标签中的单个字符-以前的帖子建议不工作

把代码写成dplyr中的group_by/摘要更简洁吗?

如何在甜甜圈图表中隐藏标签之外