如何在 R 中使用 gsub 将通配符包含在返回的表达式中?
How do I include the wildcard in a returned expression with gsub in R?
我在 R 中有一个字符串:
mystring <- "2 and 4"
我想使用 gsub 在每次出现的数字后加上“小时”,这样字符串看起来像这样:
"2 hours and 4 hours"
我已经试过了,它与数字匹配,但我想要输出中返回的数字:
gsub("\d{1}", "\d{1} hours", mystring)
[1] "d{1} hours and d{1} hours"
如何在输出中包含原始数字?
我们将单词边界(\b
)之前的数字(\d
)捕获为一个组,并在替换中指定后面捕获的组的反向引用(\1
)通过 space 然后是子串 'hours'
gsub("(\d)\b", "\1 hours", mystring)
[1] "2 hours and 4 hours"
有了stringr
,我们可以在匹配上使用R函数来构造替换:
library(stringr)
str_replace_all(
mystring,
"\d",
\(x) paste(x, "hours")
)
# [1] "2 hours and 4 hours"
你可以使用非消耗性的后视:
gsub("(?<=\d)", " hours", mystring, perl=TRUE)
#[1] "2 hours and 4 hours"
如果有更多数字,请另外使用边界:
gsub("(?<=\d)\b", " hours", mystring, perl=TRUE)
#[1] "2 hours and 4 hours"
我在 R 中有一个字符串:
mystring <- "2 and 4"
我想使用 gsub 在每次出现的数字后加上“小时”,这样字符串看起来像这样:
"2 hours and 4 hours"
我已经试过了,它与数字匹配,但我想要输出中返回的数字:
gsub("\d{1}", "\d{1} hours", mystring)
[1] "d{1} hours and d{1} hours"
如何在输出中包含原始数字?
我们将单词边界(\b
)之前的数字(\d
)捕获为一个组,并在替换中指定后面捕获的组的反向引用(\1
)通过 space 然后是子串 'hours'
gsub("(\d)\b", "\1 hours", mystring)
[1] "2 hours and 4 hours"
有了stringr
,我们可以在匹配上使用R函数来构造替换:
library(stringr)
str_replace_all(
mystring,
"\d",
\(x) paste(x, "hours")
)
# [1] "2 hours and 4 hours"
你可以使用非消耗性的后视:
gsub("(?<=\d)", " hours", mystring, perl=TRUE)
#[1] "2 hours and 4 hours"
如果有更多数字,请另外使用边界:
gsub("(?<=\d)\b", " hours", mystring, perl=TRUE)
#[1] "2 hours and 4 hours"