Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r gsub-仅替换单词的第一个匹配项_R_Regex_Gsub - Fatal编程技术网

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

r gsub-仅替换单词的第一个匹配项,r,regex,gsub,R,Regex,Gsub,我有这样一个字符串:“21-Augure-2017”,我想用“xx”替换21后的“st”,这样结果是 “2017年8月25日” 我试过使用正则重复量词,例如 gsub("st{1}", "xx", "21st-August-2017") 但这仍然替换了“st”的两个实例。如何指定它只匹配“st”的第一个实例?Trysub。这两个*sub函数的不同之处在于,sub仅替换模式的第一个匹配项,而gsub替换所有匹配项。请使用sub而不是gsub 将模式的第一个匹配项替换为sub,或将所有匹配项替换为

我有这样一个字符串:“21-Augure-2017”,我想用“xx”替换21后的“st”,这样结果是

“2017年8月25日”

我试过使用正则重复量词,例如

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

但这仍然替换了“st”的两个实例。如何指定它只匹配“st”的第一个实例?

Try
sub
。这两个*sub函数的不同之处在于,sub仅替换模式的第一个匹配项,而gsub替换所有匹配项。

请使用
sub
而不是
gsub

将模式的第一个匹配项替换为
sub
,或将所有匹配项替换为
gsub

使用后视

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

s您还可以指定更具体的正则表达式。为了你的案子

gsub(“(\\d1{1,2}st){1}”,“xx”,“2017年8月21日”)

将起作用(用一个或两个数字替换所有出现的
“st”

如果需要执行大量字符串操作,还可以查看stringr包,该包具有更详细的函数名和更合理的函数参数顺序:

stringi::stri_替换_first_regex(“2017年8月21日”、“st{1}”、“xx”)
stringi::stri\u替换\u首先固定(“2017年8月21日”,“st”,“xx”)
sub(“st”,“xx”,“2017年8月21日”,固定=真)