用gsub()和Regex替换字符串中的特定字符

用gsub()和Regex替换字符串中的特定字符,r,regex,R,Regex,我有一个很长的字符向量,一些元素丢失了单词。我想将它添加到元素中,但不需要添加单词的元素也会添加它 我使用了gsub函数来完成这项工作,我知道我需要编写一个合适的正则表达式,但我不知道如何编写它。 我认为正则表达式应该匹配以ageup开头且后面没有数字的元素,然后将包含ageup的machted元素替换为ageupwith t <- c('ageupwith65','ageup60') gsub('ageup','ageupwith',t) gsub('[ageup][^0-9]','ag

我有一个很长的字符向量,一些元素丢失了单词。我想将它添加到元素中,但不需要添加单词的元素也会添加它

我使用了gsub函数来完成这项工作,我知道我需要编写一个合适的正则表达式,但我不知道如何编写它。 我认为正则表达式应该匹配以ageup开头且后面没有数字的元素,然后将包含ageup的machted元素替换为ageupwith

t <- c('ageupwith65','ageup60')
gsub('ageup','ageupwith',t)
gsub('[ageup][^0-9]','ageupwith',t,fixed = T)
我试过两种方法,但都不正确


任何帮助都将不胜感激

您需要在此处进行负面展望:

t <- c('ageupwith65','ageup60')
sub('^ageup(?!\\d)', 'ageupwith', t, perl=TRUE)
请参阅和

请注意perl=TRUE参数,它允许使用支持lookarounds的PCRE regex引擎

sub在找到模式后只执行一次正则表达式替换:

^-字符串的开头 ageup-ageup字符串 ?!\d-在右边立即找到一个表示没有数字的负前瞻 ?=\d-正向前瞻,表示当前位置右侧有一个数字。 将ageup与可选的匹配?表示可选,并用ageupwith替换所有选项。我们在这里使用sub,因为每个组件中只有一个匹配项,但如果有多个匹配项,则使用gsub


gsub“^ageup[^0-9]”、“ageupwith”,tWell,仔细想想,您可能真的在寻找^ageup?=\d-,对吗?为老年人准备一个数字谢谢你。但是gsub“^ageup[^0-9]”、“ageupwith”不能工作。
sub('^ageup(?=\\d)', 'ageupwith', t, perl=TRUE)
sub("ageup(with)?", "ageupowith", t)
## [1] "ageupwith65" "ageupwith60"