繁体   English   中英

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

[英]Replace a specific character in a string with gsub() and Regex

我有一个很长的字符向量,有些元素丢失了“with”这个词。 我想把它加到元素中,但是不需要加词的元素也加了。

我使用gsub()函数来做到这一点,我知道我需要编写一个适当的正则表达式,但我不知道如何编写它。 我认为正则表达式应该匹配以“ageup”开头并且后面没有数字的元素,然后将包含“ageup”的machted元素替换为“ageupwith”

t <- c('ageupwith65','ageup60')
gsub('ageup','ageupwith',t)
gsub('[ageup][^0-9]','ageupwith',t,fixed = T)

我尝试了两种方法,但它们都是不正确的。

任何帮助将不胜感激!

匹配ageup后跟一个可选的 with (? 表示可选) 并用ageupwith替换所有这些。 我们在这里使用了sub ,因为每个组件中只有一个匹配项,但如果有多个匹配项,则使用gsub

sub("ageup(with)?", "ageupowith", t)
## [1] "ageupwith65" "ageupwith60"

您需要在这里进行负面展望:

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

要替换后面跟有数字的那些ageup ,请使用正向前瞻

sub('^ageup(?=\\d)', 'ageupwith', t, perl=TRUE)

请参阅正则表达式演示此正则表达式演示

请注意perl=TRUE参数,该参数允许使用支持环视的 PCRE 正则表达式引擎。

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

  • ^ - 字符串的开始
  • ageup - ageup字符串
  • (?!\\d) - 断言没有数字的否定前瞻立即在右侧找到
  • (?=\\d) - 一个肯定的前瞻断言在当前位置的右侧有一个数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM