R gsub替换中的功能

R gsub替换中的功能,r,regex,string,substring,R,Regex,String,Substring,是否可以在gsub替换短语中应用函数?比如说在str\u to\u title之后 这是一个地狱般的布拉布拉赫蛋糕 我想忽略str_to_title函数中的某些单词,以便 This is one Hell of a blahblah Cake 我知道str_to_title有它自己的异常列表,但我想通过将一些短语还原为小写来定制该列表 我目前的做法是 gsub("( Is | One | BlahBlah )", tolower("\\1"), str_to_title(x)) 但是gsub

是否可以在
gsub
替换短语中应用函数?比如说在
str\u to\u title
之后

这是一个地狱般的布拉布拉赫蛋糕

我想忽略
str_to_title
函数中的某些单词,以便

This is one Hell of a blahblah Cake
我知道str_to_title有它自己的异常列表,但我想通过将一些短语还原为小写来定制该列表

我目前的做法是

gsub("( Is | One | BlahBlah )", tolower("\\1"), str_to_title(x))

但是
gsub
将看不到
tolower
功能。如何实现这一目标?如何用作用于匹配字符串的函数替换正则表达式?

您可以在替换前加前缀,将其转换为小写:

s = "This Is One Hell Of A Blahblah Cake"

gsub("(\\bIs\\b|\\bOne\\b|\\bBlahblah\\b)", "\\L\\1", s, perl = T)
# [1] "This is one Hell Of A blahblah Cake"
或者如@joran所述,您可以使用
gsubfn
包:

library(gsubfn)
options(gsubfn.engine = "R")
gsubfn("\\bIs\\b|\\bOne\\b|\\bBlahblah\\b", ~ tolower(x), s)
# [1] "This is one Hell Of A blahblah Cake"

您可以使用前缀替换以将其转换为小写:

s = "This Is One Hell Of A Blahblah Cake"

gsub("(\\bIs\\b|\\bOne\\b|\\bBlahblah\\b)", "\\L\\1", s, perl = T)
# [1] "This is one Hell Of A blahblah Cake"
或者如@joran所述,您可以使用
gsubfn
包:

library(gsubfn)
options(gsubfn.engine = "R")
gsubfn("\\bIs\\b|\\bOne\\b|\\bBlahblah\\b", ~ tolower(x), s)
# [1] "This is one Hell Of A blahblah Cake"

你确定它们一开始是小写的吗?你不应该遵循这种方法。您可以使用
tools::toTitleCase
代码,通过添加异常来修改它。也许您正在查找包gsubfn。您确定它们首先是小写的吗?你不应该遵循这种方法。您可以使用
tools::toTitleCase
code并通过添加异常来修改它。也许您正在查找包gsubfn。
gsub(\\b(Is | One | Blahblah)\\b“,“\\L\\1”,s,perl=T)
也可以。我想用ignore.case=T来覆盖更大的范围。而且
perl=T
必须在那里才能工作。你能解释一下这个
perl=T
吗?同意
\\b(是一个Blahblah)\\b
是一个更简洁的表达式。
perl=TRUE
允许您从中使用PCRE正则表达式库,它通常比基本的R正则表达式引擎更强大。在这种情况下,我们需要
perl=TRUE
来使用
\\L
修饰符。@Kenny
\L
运算符不是PCRE的一部分,它是PCRE中内置的扩展R的库。它是在基于PCRE的Boost正则表达式库中实现的。
gsub(\\b(is(is)One | Blahblah)\\b,“\\L\\1”,s,perl=T)
也可以。我想用ignore.case=T覆盖更大的范围。而且
perl=T
必须在那里才能工作。你能解释一下这一点吗
perl=T
?同意
\\b(is | One | Blahblah)\\b
是一个更简洁的表达式。
perl=TRUE
允许您从中使用PCRE正则表达式库,它通常比基本的R正则表达式引擎更强大。在这种情况下,我们需要
perl=TRUE
来使用
\\L
修饰符。@Kenny
\L
运算符不是PCRE的一部分,它是PCRE中内置的扩展它是在基于PCRE的Boost正则表达式库中实现的。