删除R中两个字符串模式之间的字母

时间:2014-10-31 19:30:47

标签: regex r string

如何删除R?

中两个特定模式之间的字母

例如

a= "a#g abcdefgtdkfef_jpg>pple"

我想删除#gjpg>

之间的所有字母
a1="apple"

我试图在stringr中找到一些功能,但我无法

3 个答案:

答案 0 :(得分:11)

无需为此操作加载包。您可以使用基本R函数sub。它用于匹配正则表达式的第一次出现。

a <- "a#g abcdefgtdkfef_jpg>pple"
sub("#g.*jpg>", "", a)
# [1] "apple"

Regular expression explained:

  • #g匹配"#g"
  • .*匹配除\n之外的任何字符(零次或多次)
  • jpg>匹配"jpg>"

所以,我们要从#g开始删除所有内容,包括jpg>


关于你的评论

  

我试图在stringR中找到一些函数,但我不能

它实际拼写为stringr(区分大小写)。您可以使用str_replace

library(stringr)
str_replace(a, "#g.*jpg>", "")
# [1] "apple"

答案 1 :(得分:2)

除了前面的答复外,如果您使用看起来像"a#g abcdefgtdkfef_jpg>pple ; #__something_else___jpg>"的字符串,则其中某些方法将使用诸如"#.*jpg>"的表达式来对整个字符串进行细分,并且您会得到一个空字符串结果是。为避免这种情况,可以使用R regex "#[^jpg>]+jpg>",使您可以更有选择地匹配模式。

答案 2 :(得分:1)

我想添加到Rich的答案中,因为当需要在同一文本中进行多次替换时,它不起作用。

如果要在同一字符串中删除多次,则需要对代码进行一些调整:

a <- "a#g abcdefgtdkfef_jpg>pple
or#g abcdefgtdkfef_jpg>ange
ma#g abcdefgtdkfef_jpg>ngo"

# Code to get the individual fruits
gsub("#g.*?jpg>", "", a)

# Output
# [1] "apple orange mango"