我有一个字符串,如下所示:“21st-August-2017”,我想用“xx”替换21后面的“st”,以便结果为
“25xx-August-2017”
我尝试使用正则表达式重复限定符,例如:
gsub("st{1}", "xx", "21st-August-2017")
但这仍然会替换掉两个 "st" 的实例。我该如何指定它只匹配第一个 "st" 实例?
请使用 sub
替代 gsub
。
使用
sub
替换第一个匹配的模式或使用gsub
替换所有匹配的模式。
使用“向后查找”技术
s <- c("21st-August-2017")
gsub("(?<=\\d)st", "xx", s, perl = TRUE)
# [1] "21xx-August-2017"
环视(Lookarounds)确定一个特定的位置,比如在你的例子中是数字出现在st
之前。
请查看regex101.com上的演示。
试一下 sub
。两个 *sub 函数唯一的区别在于 sub 仅替换第一个符合条件的模式,而 gsub 可替换所有符合条件的模式。
gsub("(\\d1{1,2}st){1}", "xx", "21st-August-2017")
如果您需要进行大量字符串操作,请查看stringr包,它具有更详细的函数名称和更合理的函数参数排序:
stringi::stri_replace_first_regex("21st-August-2017", "st{1}", "xx")
stringi::stri_replace_first_fixed("21st-August-2017", "st", "xx")
sub("st", "xx", "21st-August-2017", fixed=TRUE)
- Wiktor Stribiżew