我试图在数据帧的一个列中在字母-和任意数字之间添加一个S。这就是一个例子:
VariableA
TRS34
MMH22
GFSR104
GS23
RRTM55
P3
S4我想要的输出是:
VariableA
TRS-34
MMH22
GFSR104
GS-23
RRTM55
P3
S-4我在试着用gsub
gsub('^([a-z])-([0-9]+)$','\\1d\\2',myDF$VariableA)
但这不管用。
我怎么才能解决这个问题?谢谢!
发布于 2021-10-20 09:18:55
您的^([a-z])-([0-9]+)$正则表达式试图匹配以字母开头的字符串,然后有一个-,然后有一个或多个数字。这不能工作,因为字符串中没有连字符,您希望将它引入字符串中。
您可以使用
gsub('(S)([0-9])', '\\1-\\2', myDF$VariableA)(S)([0-9])正则表达式匹配并将S捕获到第1组(\1),然后将任何数字捕获到第2组(\2),替换模式是组值与中间连字符的连接。如果预期的替换只有一个,则将gsub替换为sub。
其他变动:
gsub('(S)(\\d)', '\\1-\\2', myDF$VariableA) # \d also matches digits
gsub('(?<=S)(?=\\d)', '-', myDF$VariableA, perl=TRUE) # Lookarounds make backreferences redundant发布于 2021-10-20 09:22:44
下面是我喜欢使用sub的版本
myDF$VariableA <- gsub('S(\\d)', 'S-\\1', myDF$VariableA)这需要只使用一个捕获组。
发布于 2021-10-20 09:24:32
使用stringr软件包
library(stringr)
str_replace_all(myDF$VariableA, 'S(\\d)', 'S-\\1')https://stackoverflow.com/questions/69643358
复制相似问题