我想使用stringr
在由逗号分隔的分组文本周围添加圆括号。因此,如果有文本由一个或多个逗号分隔,那么我希望在文本周围添加圆括号。在这种类型的字符串开始之前总是有一个“=”,在字符串之后总是有一个空格或什么都没有(向量结束)。有没有一种通用的方法可以做到这一点?下面是一个示例问题:
样品:
a <- data.frame(Rule = c("A=0 & B=Grp1,Grp2", "A=0 & B=Grp1,Grp3,Grp4 & C=1"))
a
Rule
1 A=0 & B=Grp1,Grp2
2 A=0 & B=Grp1,Grp3,Grp4 & C=1
所需输出:
Rule
1 A=0 & B=(Grp1,Grp2)
2 A=0 & B=(Grp1,Grp3,Grp4) & C=1
2条答案
按热度按时间hm2xizp91#
下面是另一个可能的解决方案。我已经修改了示例输入,以显示它可以在每行处理多个“Grp”的情况下工作:
由reprex package(v2.0.1)于2022年11月23日创建
说明:
正则表达式=
"=([^, &]+,[^ $]+)", "=(\\1)"
=(
以等号开头,捕获组[^, &]+,
,其中一个或多个字符不是“、"、“”和“&”,后跟逗号[^ $]+)
后跟一个或多个非“”字符或行尾字符(“$”)=(\\1)
,然后替换等号并在捕获的组(例如Grp 1、Grp 2)周围添加括号qv7cva1a2#
这应该可行:
查找:
(([A-Za-z\d]+,)+[A-Za-z\d]+)
替换:
($1)
说明:
[A-Za-z\d]
是任意字母数字字符。内部组查找由逗号分隔的alphanum字符组的一个或多个副本。(例如
Abcd1,Abcd2,
)然后,外部组查找后面没有逗号的结束字母数字组(例如
Abcd3
)。将它们连接起来,然后捕获整个组。
最后要做的是替换,这是相当不言自明的。