gsub - 替换单词的第一个匹配项

5

我有一个字符串,如下所示:“21st-August-2017”,我想用“xx”替换21后面的“st”,以便结果为

“25xx-August-2017”

我尝试使用正则表达式重复限定符,例如:

gsub("st{1}", "xx", "21st-August-2017")

但这仍然会替换掉两个 "st" 的实例。我该如何指定它只匹配第一个 "st" 实例?


sub("st", "xx", "21st-August-2017", fixed=TRUE) - Wiktor Stribiżew
4个回答

14

请使用 sub 替代 gsub

使用 sub 替换第一个匹配的模式或使用 gsub 替换所有匹配的模式。


2

使用“向后查找”技术

s <- c("21st-August-2017")
gsub("(?<=\\d)st", "xx", s, perl = TRUE)
# [1] "21xx-August-2017"

环视(Lookarounds)确定一个特定的位置,比如在你的例子中是数字出现在st之前。
请查看regex101.com上的演示。


2

试一下 sub。两个 *sub 函数唯一的区别在于 sub 仅替换第一个符合条件的模式,而 gsub 可替换所有符合条件的模式。


2
您还可以指定更具体的正则表达式。对于您的情况,以下代码将起作用(替换所有前面有一到两个数字的“st”出现的位置): 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")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接