如何使用R的stringr包将字符串末尾的*替换为开头的^
回答
你可以通过正则捕获组实现需求,str_replace_all的替换参数本身不支持直接写入正则匹配逻辑,但支持通过反向引用调用匹配阶段捕获的内容,正确实现代码如下:
library(stringr) x <- c("fair*", "beaut*") str_replace_all(x, "^(.*)\\*$", "^\\1") #> [1] "^fair" "^beaut"
规则说明
- 匹配模式
^(.*)\\*$:^匹配字符串开头,$匹配字符串结尾,确保整段匹配(.*)是捕获组,会暂存星号之前的所有字符内容\\*匹配末尾的星号(星号是正则元字符,需要加反斜杠转义)
- 替换规则
^\\1:- 开头的
^就是你要添加到字符串首部的插入符号,替换串中不需要对^做额外转义 \\1是反向引用,会直接代入前面捕获组里存储的字符串内容
- 开头的
你之前尝试失败的原因是仅单独匹配了末尾的星号,修改操作只能作用在星号所在的位置,没法直接调整字符串开头的内容,通过捕获组提取有效内容再重组即可完成需求。
内容的提问来源于stack exchange,提问作者Lucas De Abreu Maia
相关产品推荐
相关产品推荐

